java - 如何检测 Java 中嵌入的 JSON 元素是 JSONObject 还是 JSONArray

标签 java json

我正在接收 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/

相关文章:

c# - 如何将 net tcp 绑定(bind)合并到 web api 环境中?

javascript - Jasmine: stub ajax 成功调用并向函数传递参数

java - log4j 支持 JSON 格式吗?

java - Web应用程序中的时间戳更改问题

java - 如何在代码中的确切位置将数据从 firebase 提取到 android studio 中?

java - 如何理解java Path.toString()方法

java - 使用大型和超大绘图的平板电脑

c# - 如何在 MVC 3 Controller 中获取动态创建的 Json 数据集?

PHP: Json解码错误

java - 从扩展类调用方法时访问资源出现 NullPointerException