在Java中反序列化JSON对象
我有一个JavaWeb服务响应作为一个对象,它有一个映射,其中整数作为键,自定义对象作为值。自定义对象依次由另一个自定义对象的列表组成。当我尝试反序列化响应时,除自定义对象列表外,所有内容都被反序列化。列表是空的 我的代码:在Java中反序列化JSON对象,java,json,gson,deserialization,unmarshalling,Java,Json,Gson,Deserialization,Unmarshalling,我有一个JavaWeb服务响应作为一个对象,它有一个映射,其中整数作为键,自定义对象作为值。自定义对象依次由另一个自定义对象的列表组成。当我尝试反序列化响应时,除自定义对象列表外,所有内容都被反序列化。列表是空的 我的代码: String dataFromServer =""; GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); Type listType = new TypeToken&l
String dataFromServer ="";
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
Type listType = new TypeToken<OuterCustomResponse>() {}.getType();
OuterCustomResponse respo = gson.fromJson(data, Books.class);
问题是响应包含年龄、名称和映射对象,但在映射对象内部,列表为空。我试图通过实现JSON反序列化程序为
CustomObj2
编写反序列化程序,但没有用。非常感谢您的帮助。如果有一些JSON示例会更好。(我想你也有一个打字错误,CtomObj1{…
)
也许customObj2
不是一个对象而不是某个基本类型(?不太可能是ok),或者您的列表是一个关联的数组(=对象),因此您得到的是一个复杂的对象而不是列表/数组
如果它是一个关联的数组(~对象),看起来就像一个列表:
OuterCustomResponse {
age:3,
name:"foo",
map:{
1:{
listitem1a:{...},
listitem2a:{...}},
2:{},
...
}}
您可能必须从以下3个选项中进行选择,才能进行一般性的反序列化:
如果它确实是一个列表((索引)数组):
列表项可以是相同的类型,也可以是不同的类型
如果它们是相同的类型,如果将listitem1propertyA
正确映射到某个CustomObj2.listitem1propertyA
字段,则您的方法应该有效
如果它们不是相同的类型(或者可能只有一个异常对象不匹配-我不知道这是否会导致空列表)同样,您必须从上面的选项中进行选择。CustomObj1类是否实现了
可序列化
?如果不实现,则可能无法序列化,并且您会得到错误的输出。我尝试在CustomObj1中实现srializablr,但运气不佳。但是CustomObj1具有其他字符串和intgr属性d正确。好的,那么你的问题只在于CustomObj2
?你的内部有什么?它也是Serializable
?它是一个自定义类,我尝试了implmnig serializabl,但没有成功。clas有原始数据类型变量请共享json文本
OuterCustomResponse {
age:3,
name:"foo",
map:{
1:{
listitem1a:{...},
listitem2a:{...}},
2:{},
...
}}
OuterCustomResponse {
age:3,
name:"foo",
map:{
1:[
{ listitem1propertyA: "bar" },
{ listitem2propertyB: "baz" }
],
2:[],
...
}}