2012-01-12 58 views
4

讓我們想象一下我有一個Java類類型的動態對象的反序列化:JSON - 使用GSON

public class MyClass 
{ 
    public String par1; 
    public Object par2; 
} 

然後,我有這樣的:

String json = "{"par1":"val1","par2":{"subpar1":"subval1"}}"; 

Gson gson = new GsonBuilder.create(); 
MyClass mClass = gson.fromJson(json, MyClass.class); 

par2 JSON是從一些給我其他應用程序,我永遠不知道它是什麼參數名稱,因爲它們是動態的。

我的問題是,MyClass上應該設置什麼類型的par2變量,以便將JSON字符串變量正確地反序列化到我的類對象中?

由於從GSON用戶指南

+0

你跟Gson綁在一起嗎?使用JSON-simple(http://code.google.com/p/json-simple)等自由格式的JSON處理器可以更好地處理您的用例。 – Perception 2012-01-12 03:09:13

回答

6

退房Serializing and Deserializing Generic Types

public class MyClass<T> 
{ 
    public String par1; 
    public T par2; 
} 

要反序列化:

Type fooType = new TypeToken<Myclass<Foo>>() {}.getType(); 
gson.fromJson(json, fooType); 

希望這有助於。

+0

我不認爲這有助於OP。在執行反序列化之前,他不知道該對象將會是什麼類型。 – Perception 2012-01-12 03:32:55

0

見凱文·杜蘭的答案上這太問題:How can I convert JSON to a HashMap using Gson?

注意,這不是接受的答案,你可能會需要修改它一下。但它非常棒。

另外,溝渠頂級對象的類型安全性,並使用hashmaps和陣列一路下降。這種方式對Dolan代碼的修改更少。

-1

驗證碼: Gson gson = new GsonBuilder.create();

應該是:

Gson gson=new Gson() 

我認爲(如果你解析JSON文檔)。

+5

您的建議與原始代碼完全相同。這無能爲力。 – dimo414 2013-12-31 21:24:22