JSON Java检查元素是一个JSONArray或JSONObject

如何检查元素是否是JSONArray或JSONObject。 我写了代码来检查,

if(jsonObject.getJSONObject("Category").getClass().isArray()) { } else { } 

在这种情况下,如果元素“类别”是JSONObject,那么它工作正常,但如果它包含一个数组,那么它会抛出exception:JSONArray不能转换为JSONObject。 请帮忙。 谢谢。

Solutions Collecting From Web of "JSON Java检查元素是一个JSONArray或JSONObject"

是的,这是因为getJSONObject("category")将尝试将该String转换为JSONObject将抛出JSONException 。 您应该执行以下操作:

通过使用以下命令来检查该对象是否是JSONObject

  JSONObject category=jsonObject.optJSONObject("Category"); 

这将返回一个JSONObject ,如果category对象不是json对象,则返回null 。 然后你做下面的事情:

  JSONArray categories; if(category == null) categories=jsonObject.optJSONArray("Category"); 

这将返回您的JSONArray或null,如果它不是一个有效的JSONArray

即使你已经得到你的答案,但它仍然可以帮助其他用户…

  if (Law.get("LawSet") instanceof JSONObject) { JSONObject Lawset = Law.getJSONObject("LawSet"); } else if (Law.get("LawSet") instanceof JSONArray) { JSONArray Lawset = Law.getJSONArray("LawSet"); } 

这里Law是其他的JSONObjectLawSet是你想要作为JSONObject or JSONArrayfind的关键。

 String data = "{ ... }"; Object json = new JSONTokener(data).nextValue(); if (json instanceof JSONObject) //you have an object else if (json instanceof JSONArray) //you have an array 

tokenizer能够返回更多types: http : //developer.android.com/reference/org/json/JSONTokener.html#nextValue()

你可以使用instanceof来检查你得到的结果的types。 那么你可以随心所欲地处理它。

  if (element instanceof JSONObject) { Map<String, Object> map = json2Java.getMap(element .toString()); if (logger.isDebugEnabled()) { logger.debug("Key=" + key + " JSONObject, Values=" + element); } for (Entry<String, Object> entry : map.entrySet()) { if (logger.isDebugEnabled()) { logger.debug(entry.getKey() + "/" + entry.getValue()); } jsonMap.put(entry.getKey(), entry.getValue()); } }