gpt4 book ai didi

java - 在单个java对象中反序列化json的父子节点数据

转载 作者:行者123 更新时间:2023-11-30 07:36:26 24 4
gpt4 key购买 nike

我是 Java 新手,在将 json 数据转换为 java 对象时遇到问题。假设我的 json 格式是

{
"totalSize" : 2,
"done" : true,
"Id" : "xyz",
"Name" : "P0000005239",
"child" : {
"Type" : "someType",
"Region" : "someRegion",
"Name" : "C001906"
},
"Address_1" : "Address_1",
"Address_2" : "Address_1"
}

如果我的java类结构是这样的,反序列化正在工作

//Working class Structure
class Demo{
int total_Size;
boolean flag_done;
String ID;
String p_name;
Child child;
String Address1;
String Address2;

//getter and setter
}

但是我的类结构是(我无法映射我的 json)

//Not Working
class Demo{
int total_Size;
boolean flag_done;
String ID;
String p_name;
String c_type;
String c_region;
String c_name;
String Address1;
String Address2;

//getter and setter
}

错误

Invocation of init method failed; nested exception is 
com.google.gson.JsonParseException: The JsonDeserializer
com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@4b28f983 failed to
deserialized json object

如何从 json 创建具有单个类中所有数据的 java 对象(即单个类中的父节点和子节点数据而不声明单独的子类)

我正在使用带有 @SerializedName 注释的 GSON 将 json 转换为 java 对象。如果您需要更多详细信息,请告诉我。

最佳答案

尝试使用fasterxml jackson

为此,您需要以 JSON 形式传递附加信息:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, 
include=JsonTypeInfo.As.PROPERTY, property="@type")
class Base {
...
}

然后在序列化时它将添加@type字段:

objectMapper.registerSubtypes(
new NamedType(ConcreteAAdapter.class, "ConcreteA"),
new NamedType(ConcreteBAdapter.class, "ConcreteB"),
new NamedType(ConcreteCAdapter.class, "ConcreteC")
);

//注意,对于列表,您需要显式传递 TypeReference

objectMapper.writerWithType(new TypeReference<List<Base>>() {})
.writeValueAsString(someList);




{
"@type" : "ConcreteA",
...
}
on deserialization it will be:



objectMapper.registerSubtypes(
new NamedType(ConcreteA.class, "ConcreteA"),
new NamedType(ConcreteB.class, "ConcreteB"),
new NamedType(ConcreteC.class, "ConcreteC")
);



objectMapper.readValue(....)

更多信息请参见:http://wiki.fasterxml.com/JacksonPolymorphicDeserialization

关于java - 在单个java对象中反序列化json的父子节点数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35331180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com