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