【发布时间】:2012-08-21 18:54:06
【问题描述】:
我使用的是spring 3.1.2,我需要将一个json对象解析成POJO。 这是我需要解析的json:
{
"Person" : {
"id" : "2"
},
"Dog" : {
"dateOfBirth" : "2012-08-20 00:00:00",
"price" : "10.00"
}
}
我需要将这个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
}
为此,我使用了ObjectMapper mapper = new ObjectMapper();
现在,由于我有几个 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
}
当我运行它时 - 我得到以下异常:
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?)
我尝试创建一个简单的 POJO - Person:
public class Person{
private String id;
public Person(){}
public Person(String id){
this.id = id;
}
... // Getter and Setter
}
并执行以下操作:
Person person = mapper.readValue(node.path("Person"), Person.class);
我得到了这个(相同的)异常:
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?)
我尝试阅读一些关于 type information 的信息 - 但不明白它对我有何帮助。
如何将此 json 转换为我的 POJO?
谢谢。
【问题讨论】:
-
你有没有试过移除你的特殊构造函数而只使用无参数?看起来它以某种方式对您的构造函数感到困惑。
-
是的,我试过了 - 但我仍然遇到同样的异常。
-
我试图重现这个问题,但我不能。我使用的是fastxml中的jackson,而不是codehaus。我直接从字符串中读取 json,而不是从节点中读取。以人为例,这很有效。对于另一个它没有,因为你在那里有这种奇怪的物体组合。您可能必须使用中间表示。
-
嗨 - 我刚刚尝试从字符串 (
{"id":"2"}) 进行映射,但它仍然不起作用 - 同样的异常。 -
以下对我来说很好用:
MyClass myClass = new ObjectMapper().readValue("{\"id\" : \"2\" }".getBytes(), MyClass.class)和 MyClass 一个简单的 bean,有一个字符串字段:id。
标签: java json spring jackson pojo