使用Json读取Json字符串导致错误“不是Json数组”

Reading Json String using Gson results error "not a JSON Array"

本文关键字:Json 不是 错误 数组 读取 字符串 使用      更新时间:2023-09-26

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

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

它包含一个JSONArray与第一个"Item"和第二个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。在这种情况下,你首先必须获得JSONObject并在那个JSONObject上执行进一步的解码。

JSONObject - {}
JSONArray - []

实际上JSONObjectJSONArray应该使用Double-quotes(")

进行编码

你的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)。具体来说,以@开头的名字是注释,你不能使用注释标签来声明变量、字段、方法等。

这不是一个有效的JSON对象。JSON中的字符串总是封装在双引号中(")。联系JSON的制作人,告诉他使用正确的编码器