2011-09-07 34 views
4

在我的项目中,我有一个复杂的JSON响应。我想阅读GSon。阅读JSON字符串使用Gson结果错误“不是JSON数组”

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

它包含一个带有第一个“Item”和第二个JSONObject的JSONArray。因此它的通话导致错误,

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. 

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

+0

你可以发布一些解析代码?看起来像你试图阅读jsonObject上的jsonArray –

+0

Vali d JSON使用'''而不是'''。这可能不是你的问题,但以防万一。 –

+0

'{“@Id”:“24”}'确实不是JSon数组。敢于在这里分享一些Java代码,特别是。你想要反序列化的类? – Thomas

回答

5

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

JSONObject - {} 

JSONArray - [] 

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

-1

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

+1

理论上不是有效的JSON字符串,但是Gson支持“和”,并且不像其他许多解析器一样支持“和”,而且Javascript支持简单引号和引号:) 请参阅http://sites.google.com/site/gson/gson - 用户导向#TOC-序列化,和反序列化 - 科尔 –

0

您的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)。具体而言,以@开头的名称是注释,不能使用注释标记声明变量,字段,方法等