我正在接收 json 并尝试使用 JSONObject 和 JSONArray 类对其进行操作。我有嵌套对象,需要确定这些嵌套对象是数组还是对象。问题是,如果我假设它是一个对象并且实际上是一个数组,那么当我调用 getJSONObject 时,会引发异常。我想知道执行此操作的唯一方法是否只是添加 try/catch block ,或者是否有更好的方法来执行此操作。例如,假设我有:
{"key1": "val1",
"key2": {"level2": {"level3": "val3"}}
}
我还可能有具有多个值的 level2 元素并以数组形式出现:
{"key1": "val1",
"key2": {"level2": [{"level3": "val3"}]}
}
如何提取 level2 对象(作为对象)并确定它是对象还是数组?这是使用字符串操作真正做到这一点的唯一方法吗?
如果我做类似的事情:
jsonObj.getJSONObject("key2").getJSONObject("level2");
这将导致错误:“org.json.JSONException: JSONObject["level2"] 不是 JSONObject,相反,如果我调用 getJSONArray("level2") 并且 level2 不是数组,我将收到错误表明它不是一个数组。
最佳答案
您可以使用 optJSONObject()
和 optJSONArray()
方法来检查底层是否是对象或数组。下面是一个示例。
JSONObject json = new JSONObject("{\"key1\": \"val1\",\n" +
" \"key2\": {\"level2\": {\"level3\": \"val3\"}}\n" +
"}");
JSONObject json1 = new JSONObject("{\"key1\": \"val1\",\n" +
" \"key2\": {\"level2\": [{\"level3\": \"val3\"}]}\n" +
"}");
if(json.getJSONObject("key2").optJSONObject("level2") != null) {
System.out.println("json : it is a jsonobject");
}
else if(json.getJSONObject("key2").optJSONArray("level2") != null) {
System.out.println("json : it is a jsonarray");
}
if(json1.getJSONObject("key2").optJSONObject("level2") != null) {
System.out.println("json1 : it is a jsonobject");
}
else if(json1.getJSONObject("key2").optJSONArray("level2") != null) {
System.out.println("json1 : it is a jsonarray");
}
关于java - 如何检测 Java 中嵌入的 JSON 元素是 JSONObject 还是 JSONArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46256609/