Java JSON-使用Gson反序列化动态对象

Java JSON-使用Gson反序列化动态对象,java,json,gson,Java,Json,Gson,假设我有一个Java类,类型如下: 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)

假设我有一个Java类,类型如下:

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字符串变量正确地反序列化到我的Class对象

谢谢

请查看GSON用户指南:

public class MyClass<T>
{
   public String par1;
   public T par2;
}
公共类MyClass
{
公共字符串par1;
公共T-par2;
}
要反序列化它,请执行以下操作:

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

希望能有所帮助。

请参阅凯文·多兰关于这个问题的答案:

请注意,这不是公认的答案,您可能需要对其进行一些修改。但是它非常棒

或者,放弃顶级对象的类型安全性,直接使用hashmaps和数组。这样可以减少对Dolan代码的修改。

此代码:
Gson Gson=new GsonBuilder.create()

应该是:

Gson gson=new Gson()

我认为(如果您正在解析一个json文档)。

如果您的对象中有动态名称,我们可以这样说:

{
    "Includes": {
        "Products": {
            "blablabla": {
                "CategoryId": "this is category id",
                "Description": "this is description",
                ...
}
您可以使用以下命令对其进行序列化:

MyFunnyObject data=new Gson().fromJson(jsonString,MyFunnyObject.class)

@Getter
@塞特
类MyFunnyObject{
包括:;
课程包括{
地图产品;
类产品{
字符串类别;
字符串描述;
}
}
}
稍后,您可以访问它:


data.getIncludes().get(“blablabla”).getCategoryId()

您是否与Gson绑定?使用类似JSON simple()的自由格式JSON处理器可以更好地处理您的用例。我认为这对OP没有帮助。在执行反序列化之前,他不知道对象将是什么类型。您的建议与原始代码完全相同。这没用。
@Getter
@Setter
class MyFunnyObject {
    Includes Includes;
    class Includes {
        Map<String, Products> Products;
        class Products {
            String CategoryId;
            String Description;
        }
    }
}