如何在java中获取JSON对象的所有节点和子节点?
我想获取下面JSON对象的所有节点。例如如何在java中获取JSON对象的所有节点和子节点?,java,json,Java,Json,我想获取下面JSON对象的所有节点。例如 结果、识别、付款等 { "result": { "identification": { "transactionid": "Merchant Assigned ID", "uniqueid": "d91ac8ff6e9945b8a125d6e725155fb6", "shortid": "0000.0005.6238", "custom
结果、识别、付款等
{
"result": {
"identification": {
"transactionid": "Merchant Assigned ID",
"uniqueid": "d91ac8ff6e9945b8a125d6e725155fb6",
"shortid": "0000.0005.6238",
"customerid": "customerid 12345"
},
"payment": {
"amount": "2400",
"currency": "EUR",
"descriptor": "order number"
},
"level": 0,
"code": 0,
"method": "creditcard",
"type": "preauthorization",
"message": "approved",
"merchant": {
"key1": "Value1",
"key0": "Value0"
}
},
"id": 1,
"jsonrpc": "2.0"
}
我使用了以下代码:
JSONObject partsData = new JSONObject(returnString);
Iterator<String> iterator = jsonObject.keys();
while (iterator.hasNext()) {
String result=iterator.next();
System.out.println(result);
}
如何获取所有节点名称?您必须解析所有对象
JSONObject partsData = new JSONObject("result");
JsonObject identification = partsData.getJsonObject("identification");
JsonObject payment = partsData.getJsonobject("payment");
在方法中移动迭代器逻辑(在json上迭代)e、 g
publicmap解析(jsonobjectjson,Map out)抛出JSONException{
迭代器keys=json.keys();
while(keys.hasNext()){
String key=keys.next();
字符串val=null;
if(json.getJSONObject(键)JSONObject的实例){
JSONObject value=json.getJSONObject(键);
解析(值,out);
}
否则{
val=json.getString(键);
}
如果(val!=null){
输出(键,val);
}
}
返回;
}
这样,您可以检查json对象中的每个子节点。您只需迭代第一级键,但您的键“结果”指向另一个包含另一级键的
JSONObject
。如果您需要解析json中的多个内容,我建议使用jackson库。谢谢您的回答。但我不想在代码中硬编码节点名称,它应该是动态的。我的代码应该接受任何JSONObject并获取节点。这可能吗?最好在尝试获取子JSONObject的地方使用instanceof检查;在正常的控制流中使用异常是不好的。我会认为打字是一个比使用预期的异常更好的选择。非常感谢你的答案。我试过你的答案,但我有个例外。线程“main”org.json.JSONException中的异常:JSONObject[“id”]不是JSONObject。请查看我在编辑链接中提供的早期答案。理想情况下,您不应该得到此异常,因为存在一个check实例来避免try-catch块(请参阅答案的上一版本)
JSONObject partsData = new JSONObject("result");
JsonObject identification = partsData.getJsonObject("identification");
JsonObject payment = partsData.getJsonobject("payment");
public Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{
Iterator<String> keys = json.keys();
while(keys.hasNext()){
String key = keys.next();
String val = null;
if ( json.getJSONObject(key) instanceof JSONObject ) {
JSONObject value = json.getJSONObject(key);
parse(value,out);
}
else {
val = json.getString(key);
}
if(val != null){
out.put(key,val);
}
}
return out;
}