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

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

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

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

  • Android:在共享首选项中存储身份validation令牌是一个好主意吗?
  • SOAP和KSOAP之间的区别
  • 如何处理Android上的大型JSON对象
  • java.net.SocketException:recvfrom失败:ECONNRESET(由对等重置连接)通过WIFI
  • 如何从Android移动应用程序调用本地Web服务
  • 使用Ksoap2(Android)检查信封
  • 如何使用带有字符串主体的齐射发送POST请求?
  • 为什么要在Android中使用sqlite数据库?
  • 是的,这是因为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()); } }