2011-08-03 28 views
1

有人可以幫助我與Gson解析器。當我從JSON中刪除更改並導致它工作正常,但隨着更改拋出JsonParseException - 分析失敗。Gson幫助解析數組 - 工作沒有數組,但不會與數組

Result[] response = gson.fromJson(fileData.toString(), Result[].class); 

我上課喜歡這個

public class Result { 
    public String start_time; 
    public String end_time; 
    public change[] change; 
} 

public class change { 
    public String id; 
    public String name; 
} 

和JSON字符串像

[ 
    { 
     "start_time": "8:00", 
     "end_time": "10:00", 
     "change": [ 
      { 
       "id": "1", 
       "name": "Sam" 
      }, 
      { 
       "id": "2", 
       "name": "John" 
      } 
     ] 
    }, 
    { 
     "start_time": "9:00", 
     "end_time": "15:00", 
     "change": [ 
      { 
       "id": "1", 
       "name": "Sam" 
      }, 
      { 
       "id": "2", 
       "name": "John" 
      } 
     ] 
    } 
] 

有人可以告訴我,我做錯了什麼?任何想法爲什麼它不會與數組一起工作?

+0

你可以發佈堆棧跟蹤嗎? –

+2

你應該嘗試使用列表來代替:'List response = gson.fromJson(fileData.toString(), List .class);' – jjnguy

+0

但是,您需要使用類型標記來獲取通用類型。 – jjnguy

回答

5

如上所述,您需要使用列表來代替。 Gson在分析器中使用參數化類型的文檔非常好,您可以閱讀更多關於它的文檔here。你的代碼最終會看起來像這樣:

Type listType = new TypeToken<List<Result>>() {}.getType(); 
List<Result> results = gson.fromJson(reader, listType); 
for (Result r : results) { 
    System.out.println(r); 
} 
+0

我試過了,但它是一樣的錯誤。在數組Result中它不是問題,它在json中沒有嵌入數組CHANGE時起作用。但在Json時它不會工作。那部分我不明白。 – Damir

+0

@達米爾 - 不知道我是否按照你的問題。我根據你上面發佈的內容構建了一個工作測試用例,你可能想用一些* not *工作的代碼來擴展你的問題。 – Perception

+0

可以在一個非常複雜的jsonArray中完美工作,其中包含多個數組和對象。非常感謝你。 –