使用嵌套对象列表反序列化 json
Deserialize json with list of nested objects
我想使用 jackson-databind 将 json 反序列化为包含其他对象列表的对象。
我正在尝试反序列化 json。我有 Class class1,它有一个 List<NestedProp>
。 Prop2 是一个数组列表。 List<NestedProp> prop2
.
Classe结构
`
class Class1 {
String prop1;
List<NestedProp> prop2;
//setters getters
}
class NestedProp {
String p1;
String p2;
//setters getters
}
`
```
"class1": {
"prop1": "pp",
"prop2": [
{
"nestedProp": [
{
"p1": "127",
"p2": "1"
},
{
"p1": "128",
"p2": "2"
}
]
}
]
}
While deserialisingI get the below exception:
>com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `NestedProp` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('127')
at [Source: (File); line: 59, column: 7] (through reference chain: java.util.ArrayList[1]->Class1["prop2"]->java.util.ArrayList[0])
List<Class1> testData = objectMapper.readValue(test.json, Class1.class);
您的 JSON
有效负载中有两个数组。因此,您需要为其创建额外的 POJO
。请参阅以下示例:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.List;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
Root root = mapper.readValue(jsonFile, Root.class);
System.out.println(root);
}
}
class Root {
private Class1 class1;
//getters, setters, toString
}
class Class1 {
private String prop1;
private List<NestedProps> prop2;
//getters, setters, toString
}
class NestedProps {
private List<NestedProp> nestedProp;
//getters, setters, toString
}
class NestedProp {
private String p1;
private String p2;
//getters, setters, toString
}
下面JSON
:
{
"class1": {
"prop1": "pp",
"prop2": [
{
"nestedProp": [
{
"p1": "127",
"p2": "1"
},
{
"p1": "128",
"p2": "2"
}
]
}
]
}
}
以上示例打印:
Root{class1=Class1{prop1='pp', prop2=[NestedProps{nestedProp=[NestedProp{p1='127', p2='1'}, NestedProp{p1='128', p2='2'}]}]}}
另请参阅:
我想使用 jackson-databind 将 json 反序列化为包含其他对象列表的对象。
我正在尝试反序列化 json。我有 Class class1,它有一个 List<NestedProp>
。 Prop2 是一个数组列表。 List<NestedProp> prop2
.
Classe结构 `
class Class1 {
String prop1;
List<NestedProp> prop2;
//setters getters
}
class NestedProp {
String p1;
String p2;
//setters getters
}
`
```
"class1": {
"prop1": "pp",
"prop2": [
{
"nestedProp": [
{
"p1": "127",
"p2": "1"
},
{
"p1": "128",
"p2": "2"
}
]
}
]
}
While deserialisingI get the below exception:
>com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `NestedProp` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('127')
at [Source: (File); line: 59, column: 7] (through reference chain: java.util.ArrayList[1]->Class1["prop2"]->java.util.ArrayList[0])
List<Class1> testData = objectMapper.readValue(test.json, Class1.class);
您的 JSON
有效负载中有两个数组。因此,您需要为其创建额外的 POJO
。请参阅以下示例:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.List;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
Root root = mapper.readValue(jsonFile, Root.class);
System.out.println(root);
}
}
class Root {
private Class1 class1;
//getters, setters, toString
}
class Class1 {
private String prop1;
private List<NestedProps> prop2;
//getters, setters, toString
}
class NestedProps {
private List<NestedProp> nestedProp;
//getters, setters, toString
}
class NestedProp {
private String p1;
private String p2;
//getters, setters, toString
}
下面JSON
:
{
"class1": {
"prop1": "pp",
"prop2": [
{
"nestedProp": [
{
"p1": "127",
"p2": "1"
},
{
"p1": "128",
"p2": "2"
}
]
}
]
}
}
以上示例打印:
Root{class1=Class1{prop1='pp', prop2=[NestedProps{nestedProp=[NestedProp{p1='127', p2='1'}, NestedProp{p1='128', p2='2'}]}]}}
另请参阅: