2013-07-16 212 views
1

我有一個從服務器輸出的字符串,我試圖從字符串中提取一些值。將字符串轉換爲gson對象

下面是來自服務器的輸出:

jsonString = 

{ 
    "MEANING":"reduce", 
    "DISPLAY":"", 
    "TYPE_CD":1, 
    "SELECTED_IND":1, 
    "CNT":1, 
    "SOURCES":[ 
       { "a":1 } 
      ] 
} 

代碼:

JsonReader reader = new JsonReader(new StringReader(jsonString)); 
DataObject obj1 = new Gson().fromJson(reader, DataObject.class); 

數據對象類:

DataObject 
{ 
    private int MEANING; 
    private int CNT; 
    private String TYPE_CD; 
    private String DISPLAY; 
    private String MEANING; 
    private List<Long> SOURCES; 

    public String getSourceTypeMeaning() 
    { 
     return this.MEANING; 
    } 

    public String getSourceTypeDisplay() 
    { 
     return this.DISPLAY; 
    } 

    public String getSourceTypeCd() 
    { 
     return this.TYPE_CD; 
    } 

    public int getSourceCount() 
    { 
     return this.CNT; 
    } 

    public List<Long> getSourceList() 
    { 
     return this.SOURCES; 
    } 
} 

,但得到這個錯誤

Expected a string but was BEGIN_OBJECT at line 1 column 132 

我無法用我的代碼找到問題。

回答

1

其他的答案被指出的問題是在SOURCES領域,這是事實,但他們給的解決方案是不正確的......

你不能只使用一個Map解析SOURCES字段,因爲這個字段確實是一個數組!你有:

"SOURCES": [ ... ] 

既然你有方括號[ ],你有一個數組!而且這是真的有一個Map,但它包含在數組中......

所以,你需要正確地分析領域是什麼:

private List<Map<String, int>> SOURCES; 

注意,我們使用一個Map來允許SOURCES內容有多重的和未知的值,因此,該代碼可以解析不僅你的JSON,類似:

"SOURCES":[ 
       { "a":1, "b":2 }, 
       { "c":3 }, 
       { "x":99, "y":98, "z":97 } 
      ] 
+0

請問,可否downvoter解釋downvote的原因? – MikO

+0

+1 @Miko糾正每個人,是的來源是一個列表。 –

0

SOURCES變量應該是Map<String,Long>,因爲在JSON字符串中SOURCES是鍵值集合("a":1)其中「a」是字符串,1是數字。

希望這會有所幫助。

+0

我改變我的代碼使用HashMap,仍然出現錯誤。私人HashMap SOURCES; public HashMap getSourceList(){ return this.SOURCES; }仍然收到錯誤說「預計BEGIN_ARRAY,但在BEGIN_OBJECT第1行」 – user1772643

+0

-1,錯誤的答案:'SOURCES'字段顯然是一個JSON數組,因爲它有方括號'[]'... – MikO

0

入住這

"SOURCES":[ 
       { "a":1 } 
] 

這將代表地圖不是很長的目錄列表。

因此請將您的List<long>更改爲List<Map<String, Long>>List<Map<Object, Long>>

+0

你的回答如何不同於ilya.stmn ..請不要複製答案.. –

+0

@shanku遺憾地說,但我沒有複製答案。當我提交我的答案後,我看到相同的答案已經提交,當我開始寫作時,那時沒有答案。 –

+0

-1,錯誤的答案:'SOURCES'字段確實代表'List',因爲它有方括號'[]'... – MikO