在Java中,如何检测嵌入的JSON元素是JSONObject还是JSONArray
我正在接收json,并尝试使用JSONObject和JSONArray类对其进行操作。我有嵌套对象,需要确定这些嵌套对象是数组还是对象。问题是,如果我假设它是一个对象,而实际上是一个数组,那么当我调用getJSONObject时,就会引发一个异常。我想知道这样做的唯一方法是添加try/catch块还是有更好的方法。例如,假设我有:
{"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不是数组,我将得到一个错误,表明它不是数组
# 1 楼答案
如果您愿意使用Jackson的Databind模块,那么它非常简单:
# 2 楼答案
我将字符串化JSON对象并检查“{”或“[”的索引。
如果有Json,我会将其字符串化。如果stringized对象中的{索引为0,则为Json对象;如果stringized对象中的{索引为0,则为Json数组
我使用Vertx框架,我可以按如下方式进行验证:
# 3 楼答案
使用“jsonObj”。获取(“level2”)并检查类型是否为JsonArray,然后尝试强制转换它
# 4 楼答案
您可以使用
optJSONObject()
&optJSONArray()
方法来检查底层是对象还是数组。下面是一个例子