繁体   English   中英

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

[英]JSON - deserialization of dynamic object using 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);

par2 JSON是从其他应用程序给我的,我不知道它的参数名称是什么,因为它们是动态的。

我的问题是,要将MyClass上的par2变量设置为什么类类型,以便将JSON String变量正确反序列化为我的类对象?

谢谢

查看GSON用户指南中的序列化和反序列化通用类型

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

要反序列化它:

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

希望这有帮助。

如果你的对象里面有动态名称,那就说这个:

{
    "Includes": {
        "Products": {
            "blablabla": {
                "CategoryId": "this is category id",
                "Description": "this is description",
                ...
}

您可以使用以下命令序列化它:

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

@Getter
@Setter
class MyFunnyObject {
    Includes Includes;
    class Includes {
        Map<String, Products> Products;
        class Products {
            String CategoryId;
            String Description;
        }
    }
}

以后你可以访问它:

data.getIncludes().get("blablabla").getCategoryId()

请参阅Kevin Dolan关于这个问题的答案: 如何使用Gson将JSON转换为HashMap?

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

或者,抛弃顶级对象的类型安全性,并一直使用哈希映射和数组。 这种方式对Dolan代码的修改较少。

这段代码: Gson gson = new GsonBuilder.create();

应该:

Gson gson=new Gson()

我想(如果你正在解析一个json doc)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM