2014-11-25 86 views
0

我想解析包含两个阵列的对象和那些之间的关系的JSON文件的一对多的关系杰克逊解析JSON,这是一个例子:在单一步骤

{ 
    "a": [ 
     { 
      "name": "one", 
      "id": 1 
     }, 
     { 
      "name": "two", 
      "id": 2 
     }, 
     { 
      "name": "three", 
      "id": 3 
     } 
    ], 
    "b": [ 
     { 
      "name": "cool", 
      "a_id": 1 
     }, 
     { 
      "name": "better", 
      "a_id": 1 
     }, 
     { 
      "name": "no_id", 
      "a_id": null 
     } 
    ] 
} 

我想将这些地图映射到两个实体AentityBentity,其中Aentity应包含Bentities的数组。

而且我还想要列出Bentities与null a_id。

这是可能与杰克逊在一个单一的解析?怎么样?

注意:我在问,因为我必须解析的文件比较大。

回答

1

你可以实现你问由兼具您Bentityida_id属性,如下所示:

public class JacksonParsing { 

    private static final String JSON = "{\n" + 
      " \"a\": [\n" + 
      "  {\n" + 
      "   \"name\": \"one\",\n" + 
      "   \"id\": 1\n" + 
      "  },\n" + 
      "  {\n" + 
      "   \"name\": \"two\",\n" + 
      "   \"id\": 2\n" + 
      "  },\n" + 
      "  {\n" + 
      "   \"name\": \"three\",\n" + 
      "   \"id\": 3\n" + 
      "  }\n" + 
      " ],\n" + 
      " \"b\": [\n" + 
      "  {\n" + 
      "   \"name\": \"cool\",\n" + 
      "   \"a_id\": 1\n" + 
      "  },\n" + 
      "  {\n" + 
      "   \"name\": \"better\",\n" + 
      "   \"a_id\": 1\n" + 
      "  },\n" + 
      "  {\n" + 
      "   \"name\": \"no_id\",\n" + 
      "   \"a_id\": null\n" + 
      "  }\n" + 
      " ]\n" + 
      "}"; 

    public static void main(String... args) throws IOException { 
     ObjectMapper objectMapper = new ObjectMapper(); 

     Aentity result = objectMapper.readValue(JSON, Aentity.class); 

     System.out.println(result.getB().get(0).getName()); 
    } 

    static class Aentity { 

     private List<Bentity> a; 
     private List<Bentity> b; 

     public Aentity() { 

     } 

     public List<Bentity> getA() { 
      return a; 
     } 

     public void setA(List<Bentity> a) { 
      this.a = a; 
     } 

     public List<Bentity> getB() { 
      return b; 
     } 

     public void setB(List<Bentity> b) { 
      this.b = b; 
     } 

    } 

    static class Bentity { 

     private String name; 
     private Integer id; 
     private Integer a_id; 

     public Bentity() { 

     } 

     public String getName() { 
      return name; 
     } 

     public void setName(String name) { 
      this.name = name; 
     } 

     public Integer getId() { 
      return id; 
     } 

     public void setId(Integer id) { 
      this.id = id; 
     } 

     public Integer getA_id() { 
      return a_id; 
     } 

     public void setA_id(Integer a_id) { 
      this.a_id = a_id; 
     } 
    } 

} 

然而,你可能会更好,其中Aentitynameid财产,而Bentity有一个namea_id属性(即不同的类型)都包含由不同的父对象。