[英]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.