2011-09-07 36 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)。具體而言,以@開頭的名稱是註釋,不能使用註釋標記聲明變量,字段,方法等