gpt4 book ai didi

java - 如何使用java通过id查找json节点并返回该节点?

转载 作者:行者123 更新时间:2023-12-01 17:40:20 27 4
gpt4 key购买 nike

我想使用java通过id查找节点并返回该节点,但现在我只能打印出该节点,返回值为null。这是什么原因以及如何处理?

这是 json:

{
id: '1',
label: 'first',
children: [
{
id: '2',
label: 'second'
}
]
}

这是我现在使用的代码。使用JSONObject遍历json方法大部分取自https://www.baeldung.com/jsonobject-iteration

package cn.velosoft.demo1;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

public class GetTreeNode {
public static void main(String[] args) {
String json1 = "{\r\n" +
" id: '1',\r\n" +
" label: 'first',\r\n" +
" children: [\r\n" +
" {\r\n" +
" id: '2',\r\n" +
" label: 'second'\r\n" +
" }\r\n" +
" ]\r\n" +
"}";

JSONObject jObject1 = new JSONObject(json1);
String id = "2";
JSONObject returnNode = findNodeById(jObject1, id);
// I want the node to return to here
System.out.println(returnNode);
}

private static JSONObject findNodeById(JSONObject jObject1, String id) {

Iterator iterator = jObject1.keys();
while (iterator.hasNext()) {
String key = (String) iterator.next();
if (key.equals("id")) {

String value = jObject1.getString(key);
if (((String) value).equals(id)) {
JSONObject returnNode = new JSONObject(jObject1.toString());
System.out.println(returnNode);
return returnNode; //return value here doesn't work ...
}
} else {
Object value = jObject1.get(key);
handleValue(value, id);
}
}
return null;

}

private static void handleValue(Object value, String id) {
if (value instanceof JSONObject) {
findNodeById((JSONObject) value, id);
} else if (value instanceof JSONArray) {
handleJSONArray((JSONArray) value, id);
} else {
}

}

private static void handleJSONArray(JSONArray jsonArray, String id) {
jsonArray.iterator().forEachRemaining(element -> {
handleValue(element, id);
});

}
}

输出为:

{"id":"2","label":"第二个"}

第一个{"id":"2","label":"second"}是中间的System.out.println(),第二个null是main函数中的打印。为什么它是空的?怎么做?

最佳答案

正如 @LHCHIN 评论的那样,为什么您不从方法 findNodeById() 返回 JSONObject 对象。当找到匹配的键时,必须返回该值。在您的代码中,您始终返回 null

private static JSONObject findNodeById(JSONObject jObject1, String id) {
Iterator iterator = jObject1.keys();
while (iterator.hasNext()) {
String key = (String) iterator.next();
if (key.equals("id")) {
String value = jObject1.getString(key);
if (((String) value).equals(id)) {
JSONObject returnNode = new JSONObject(jObject1.toString());
System.out.println(returnNode);
return returnNode //return value here
}
} else {
Object value = jObject1.get(key);
handleValue(value, id);
}
}
return null;

}

关于java - 如何使用java通过id查找json节点并返回该节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60962259/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com