2011-05-22 48 views
0

當使用GSON庫(來自Google的json庫)時出現問題。希望有人能給我一些提示。如何使用GSON庫反序列化JSON字符串之間的JSON字符串

問題是,當我使用gson.fromJson()函數試圖將json字符串轉換爲指定的定義類。

的示例代碼:

String jsonStr = "{name:"ABC", countries:["US"]}"; // Some Json string. 
Gson gson = new Gson(); 
Example example = gson.fromJSON(jsonStr, Example.class); 

class Example { 
    // does no have no-arg constructor 
    private String name; 
    private Integer age; 
    private JSONArray keywords; // import org.json.JSONArray; 
    private JSONArray countries; 

    // other codes 
} 

上面的代碼簡單求我的問題的版本。 問題出在fromJson()函數中。錯誤消息是說「JsonParseException:期待找到的對象[」US「]」。我想不出什麼問題。我想也許gson不知道如何將字符串轉換爲JSONArray。因爲在這裏,JSONArray來自另一個庫(org.json)。

我試圖找出gson文檔。看起來我需要編寫一些「實例創建器」代碼。

我想知道另一個可以給我一些解決方案。謝謝。

+0

您的代碼是無效的。 ABC和US坐在字符串之間。另外,如果你的JSON字面上是'{name:'ABC',countries:[「US」]}',那麼你還有無效的JSON。 – Thanatos 2011-05-22 18:49:46

+0

@Thanatos。對於混淆抱歉。我沒有測試這些代碼。 – easycoder 2011-05-22 19:40:08

回答

1

只要關鍵字和國家一個java列表類型。我從未見過org.json與gson混合使用。通常gson替換org.json並不意味着一起使用。

編輯:

小例子:

class Example { 
    private String name; 
    private Integer age; 
    private List<String> keywords; 
    private List<String> countries; 

    public String toString() { 
     return new Gson().toJson(this); 
    } 
} 
+0

我明白了。感謝您的建議。其實我試着看看gson是否可以通過使用一些反射來將Json字符串轉換爲Java對象。 – easycoder 2011-05-22 19:39:57

+0

@easycoder:內部gson使用反射將字符串轉換爲java對象;這是圖書館的重點。你所要做的就是將json建模爲一個java對象,它只是起作用。 – Kevin 2011-05-24 18:58:17

+0

是的。這很酷...和方便。我試圖用gson與JSON.org libray混合使用 – easycoder 2011-05-24 20:31:32