如何使用jackson将json转换为java中的POJO

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?

谢谢.

Noa*_*oam 6

我做的是这样的:我创建了一个包含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)

我仍然希望在不创建这两个对象(人和狗)的情况下这样做 - 现在已经足够好了 - 但如果有人有想法 - 我想在这里!

谢谢.