Noa*_*oam 9 java spring json pojo jackson
我正在使用spring 3.1.2,我需要将一个json对象解析为POJO.这是我需要解析的json:
{
"Person" : {
"id" : "2"
},
"Dog" : {
"dateOfBirth" : "2012-08-20 00:00:00",
"price" : "10.00"
}
}
Run Code Online (Sandbox Code Playgroud)
我需要将这个json对象(由两个对象组合)转换为一个POJO,这里是:
public class MyClass{
public MyClass(){}
public MyClass(String personsId, TimeStamp dogsDateOfBirth, BigDecimal dogsPrice){
.... // assign each parameter to the appropriate field
}
private String personsId;
private TimeStamp dogsDateOfBirth;
private BigDecimal dogsPrice;
//... Getters and Setters for each field
}
Run Code Online (Sandbox Code Playgroud)
为此,我使用了ObjectMapper mapper = new ObjectMapper();
Now,因为我有几个json对象,我的代码看起来像这样:
String json = ... ;// A json with several objects as above
JsonNode tree = mapper.readTree(json);
Iterator<JsonNode> iter = tree.path("data").getElements();
while (iter.hasNext()){
JsonNode node = iter.next();
MyClass myClass = mapper.readValue(node, MyClass.class);
... // do something with myClass object
}
Run Code Online (Sandbox Code Playgroud)
当我运行它 - 我得到以下异常:
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class ...MyClass]: can not instantiate from JSON object (need to add/enable type information?)
Run Code Online (Sandbox Code Playgroud)
我试图创建一个简单的POJO - Person:
public class Person{
private String id;
public Person(){}
public Person(String id){
this.id = id;
}
... // Getter and Setter
}
Run Code Online (Sandbox Code Playgroud)
并执行以下操作:
Person person = mapper.readValue(node.path("Person"), Person.class);
Run Code Online (Sandbox Code Playgroud)
我得到这个(相同)异常:
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class ...Person]: can not instantiate from JSON object (need to add/enable type information?)
Run Code Online (Sandbox Code Playgroud)
我试着阅读一些有关类型信息的内容 - 但无法理解它在这里如何帮助我.
如何将这个json转换成我的POJO?
谢谢.
我做的是这样的:我创建了一个包含Person对象和Dog对象的新类,这些类需要是静态的(我在这里找到它).以下是课程:
public static class MyNewClass{
private Person person;
private Dog dog;
... // two constructors and getters and setters
public static class Person{
private String id;
... // two constructors and getters and setters
}
public static class Dog{
private String dateOfBirth;
private String price;
... // two constructors and getters and setters
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的代码看起来像这样:
JsonNode tree = mapper.readTree(jsonString);
Iterator<JsonNode> iter = tree.path("data").getElements();
while (iter.hasNext()){
JsonNode node = iter.next();
Person person = mapper.readValue(node.path("Person"), Person.class);
Dog dog = mapper.readValue(node.path("Dog"), Dog.class);
MyNewClass myNewClass = new MyNewClass(person , dog);
... //Do something with it
}
Run Code Online (Sandbox Code Playgroud)
我仍然希望在不创建这两个对象(人和狗)的情况下这样做 - 现在已经足够好了 - 但如果有人有想法 - 我想在这里!
谢谢.
| 归档时间: |
|
| 查看次数: |
46863 次 |
| 最近记录: |