【问题标题】:Reading Json String using Gson results error "not a JSON Array"使用 Gson 读取 Json 字符串结果错误“不是 JSON 数组”
【发布时间】:2011-11-11 22:54:45
【问题描述】:

在我的项目中,我有一个复杂的 json 响应。我想读GSon。

JSON : {'FoodMenuRS':{'Results':[{'Items':{'Item':[{'@Id':'24'},{'@Id':'24'}]}}, {'Items':{'Item':{'@Id':'24'}}}]}}

它包含一个带有第一个“项目”的 JSONArray 和带有第二个“项目”的 JSONObject。因此它的调用会导致错误,

failed to deserialize json object {"@Id":"24"} given the type java.util.List<com.servlet.action.ItemInfo>  and  java.lang.IllegalStateException: This is not a JSON Array.

请帮助我应该如何处理这种情况。谢谢。

【问题讨论】:

  • 你能发布一些解析代码吗?看起来你正在尝试在 jsonObject 上读取 jsonArray
  • 有效 JSON 使用 " 而不是 '。这可能不是你的问题,但以防万一。
  • {"@Id":"24"} 确实不是 JSON 数组。敢于在这里分享一些 Java 代码,尤其是。你想反序列化到哪些类?

标签: java javascript android json gson


【解决方案1】:

您显示的字符串是JSONObject 而不是JSONArray。因此,在这种情况下,您首先必须获取 JSONObject 并对该 JSONObject 执行进一步解码。

JSONObject - {}

JSONArray - []

确实JSONObjectJSONArray 应该使用Double-quotes(") 编码

【讨论】:

    【解决方案2】:

    您的 JSON 有效,但对于双引号 (") 无效,因为 JSON 支持单引号 (') 并且密钥名称中没有引号。请参阅 http://sites.google.com/site/gson/gson-user-guide#TOC-Serializing-and-Deserializing-Colle

    但是,此 JSON 具有以 @ 开头的键名。对于 JSON 字符串,此字符在名称的开头是有效的(请参阅右列 http://www.json.org/),但对于 Java,此名称是非法的(请参阅命名部分 http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html)。具体来说,以@开头的名字是注解,不能使用注解标签来声明变量、字段、方法等。

    【讨论】:

      【解决方案3】:

      这不是一个有效的 JSON 对象。 JSON 中的字符串总是用双引号 (") 封装。联系该 JSON 的生产者并告诉他使用正确的编码器。

      【讨论】:

      • 理论上不是一个有效的 JSON 字符串,但 Gson 支持 " 和 ' 并且没有引号,就像许多其他解析器一样。Javascript 也支持简单的引号和没有引号 :) 见 sites.google.com/site/gson/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多