Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中反序列化JSON对象_Java_Json_Gson_Deserialization_Unmarshalling - Fatal编程技术网

在Java中反序列化JSON对象

在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

我有一个JavaWeb服务响应作为一个对象,它有一个映射,其中整数作为键,自定义对象作为值。自定义对象依次由另一个自定义对象的列表组成。当我尝试反序列化响应时,除自定义对象列表外,所有内容都被反序列化。列表是空的

我的代码:

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:[], 
    ... 
}}