2015-11-17 115 views
0

我正在努力將具有變量內容的JSON對象解析爲Java對象。Gson/Retrofit解析變量JSON

通常,我會嘗試將JSON對象映射到POJO,但在這種情況下,我不知道該怎麼做。

我的JSON是這樣的:

"parts": [ 
      [ 
      "text", 
      "http://www.example.com/" 
      ], 
      [ 
      "page", 
      [ 
       "http://www.example.com/", 
       "\n\t\n\t\t\n\t\t\tSome of the Page Content preview here...", 
       "", 
       "/path/to/picture.jpg" 
      ] 
      ], 
      [ 
      "text", 
      "Another String here " 
      ] 
     ] 

運行這段代碼低谷典型的Json到Java對象轉換器不工作,因爲這不能被映射到一個簡單的POJO。

我試圖轉換爲List<List<String>>> myObject;,但預期這給了我一個例外:

W: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 9563 path $[3]./object.parts[1][1] 

我想我要創建一個自定義解串器這一點,但我不知道從哪裏開始。

任何幫助指出我在良好的方向將不勝感激。

編輯:正如在評論中指出的,是提供的JSON數據不是有效的鍵值對形成。我已經聯繫了API提供商,他們會解決這個問題。

直到我遇到前端處理這個問題的一種方法,我會保持這個問題的公開。

+0

它不是鍵值對,你可能想重新考慮json數據 –

+0

你可以用gson將它轉換爲LinkedHashMap/ArrayLists嗎? – Bill

回答

0

所以之後的AF幾天後再次在這個問題看後,我終於發現,我的情況下有效的解決方案!

而不是試圖將元素解析爲String,正如我第一次嘗試。現在我的數據存儲到一個簡單的java.lang.Object

我的模型現在看起來是這樣的:

@SerializedName("parts") 
@Expose 
private List<List<Object>> parts = new ArrayList<List<Object>>(); 

這可以防止GSON解析過程,從檢測到無效的數組時崩潰的應用程序。

當試圖訪問數據時,我現在檢查對象是否爲String類型,如果這種情況我繼續,忽略所有數組。

在我的代碼,這看起來是這樣的: (在我的情況,我只需要第一個元素的文本屬性的部分陣列中)

List<List<Object>> partList = myParsedObject.getParts(); 
    if (partList.size() > 0) { 
     if (partList.get(0).size() > 1) { 
      if (partList.get(0).get(1) instanceof String) { 
       return partList.get(0).get(1).toString(); 
      } 
     } 
    } 
0

第二個數組元素中的第二個元素也是您發佈的JSON中的數組。

由於GSON正在期待字符串列表的列表,因此無法解析此時開始的文檔。

"parts": [ 
     ..., 
     [ 
     "page", 
     [ <--- Problematic array begin 
      "http://www.example.com/", 
      "\n\t\n\t\t\n\t\t\tSome of the Page Content preview here...", 
      "", 
      "/path/to/picture.jpg" 
     ] 
     ], 
     ... 
    ] 
+0

我意識到這是一個問題,但我正在尋找一種解決方法來檢索信息。對此有何建議? – RWIL

+0

您是否擁有JSON文檔?本文檔不能很好地使用JSON中可用的結構。 – rmlan

+0

不幸的是,這是我必須使用的API提供的。 – RWIL

0

您的JSON的格式不正確,我試着檢查您發佈的JSON到一個Online JSON Formatter它不能解析你的JSON。你需要來封裝JSON花括號內,像這樣:

{"parts": [ 
     [ 
     "text", 
     "http://www.example.com/" 
     ], 
     [ 
     "page", 
     [ 
      "http://www.example.com/", 
      "\n\t\n\t\t\n\t\t\tSome of the Page Content preview here...", 
      "", 
      "/path/to/picture.jpg" 
     ] 
     ], 
     [ 
     "text", 
     "Another String here " 
     ] 
    ] 
} 

這JSON將通過在線JSON格式化成功解析,您應該能夠解析它就好了。問題是你必須在很多JSON Array上工作,它沒有任何key來識別它們。映射它會很麻煩,因爲在"page"字符串之後的JSON Array

如果我的建議JSON可以被映射到一個List<List<String>> POJO,你必須得到第二個元素並手動解析它,因爲第二個數組裏面仍然有一個數組。

希望這會有所幫助,祝你好運!

問候,

裏德