【问题标题】:Weird behavior when calling org.json.JSONObject.getJSONArray调用 org.json.JSONObject.getJSONArray 时的奇怪行为
【发布时间】:2011-04-21 14:12:33
【问题描述】:

嘿, 我在调用 getJSONArray 时注意到了这种非常奇怪的行为。 这是我的代码:

 JSONObject jsonObject = new JSONObject(data);
 if (!jsonObject.getJSONObject("transfer").has("skill"))
     return Collections.emptyList();
 JSONArray events = jsonObject.getJSONObject("transfer").getJSONArray("skill");

现在,只要转移有超过1个技能元素,一切都很好,但是当只有1个技能元素时,我得到一个例外:

原因:org.json.JSONException: 值 {"id":"2","name":"DOGS"} 在 org.json.JSONObject 类型的技能 无法转换为 JSONArray 在 org.json.JSON.typeMismatch(JSON.java:96) 在 org.json.JSONObject.getJSONArray(JSONObject.java:548) ....

这有意义吗?我真的必须捕获异常并处理这种特定的数组吗?

谢谢, 乌迪

【问题讨论】:

    标签: java android json getjson


    【解决方案1】:

    每当您检索 JSON 对象时,请使用 try/catch 块包围您的代码。这样,当您收到任何意外的 JSON 对象时,您的程序将继续运行。

    至于您的错误,当只有一项时,您的 JSONArray“技能”似乎没有被存储为数组。如果您使用 Web 服务来创建 JSON 对象,则问题可能出在 Web 服务中。

    【讨论】:

      【解决方案2】:

      在您正在阅读的 JSON 中,当有一个元素时,它可能具有以下内容:

      skill: {"id":"2","name":"DOGS"}
      

      而不是:

      skill: [{"id":"2","name":"DOGS"}]
      

      注意单个对象和包含单个对象的数组之间的区别。在您的代码中,您使用 getJSONArray 来请求数组,当它不是数组时会导致异常。

      您需要在使用 getJSONArray 之前检查“skill”的值是否是一个数组,或者假设它是一个数组并捕获异常以处理单个对象的情况。或者,如果您可以修改生成 JSON 的应用程序,您可以修复它以将“技能”对象放入一个数组中,即使只有一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多