2017-09-17 16 views
0

这是我的POJO的:如何将这2个jackson序列化结合到一个?

public static class MyPojo { 
    private int rootId; 
    private String command; 
    private Double value; 

    // I want this property to be shown at root level 
    @JsonIgnore 
    public int getRootId() { 
     return rootId; 
    } 

    public void setRootId(int rootId) { 
     this.rootId = rootId; 
    } 

    public String getCommand() { 
     return command; 
    } 

    public void setCommand(String command) { 
     this.command = command; 
    } 

    public Double getValue() { 
     return value; 
    } 

    public void setValue(Double value) { 
     this.value = value; 
    } 
} 

这是我的第一序列化方法:

public static void writeJsonId6() throws JsonProcessingException { 
    MyPojo pojo = new MyPojo(); 
    pojo.setRootId(6); 
    pojo.setCommand("property.batch"); 
    pojo.setValue(129.00); 

    ObjectMapper mapper = new ObjectMapper(); 
    mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); 
    String json = mapper.writer().withRootName(Integer.toString(pojo.getRootId())).writeValueAsString(pojo); 

    System.out.println(json); 
} 

JSON输出:{ “6”:{ “命令”: “property.batch”, “值”: 129.0}}

这里是我的第二个序列化方法:

public static void writeJsonId7() throws JsonProcessingException { 
    MyPojo pojo = new MyPojo(); 
    pojo.setRootId(7); 
    pojo.setCommand("property.batch"); 
    pojo.setValue(88.00); 

    ObjectMapper mapper = new ObjectMapper(); 
    mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); 
    String json = mapper.writer().withRootName(Integer.toString(pojo.getRootId())).writeValueAsString(pojo); 

    System.out.println(json); 
} 

JSON输出:{ “7”:{ “命令”: “property.batch”, “值”:88.0}}

这是我需要:

{ “6”: {“command”:“property.batch”,“value”:129.0},“7”:{“command”:“property.batch”,“value”:88.0}}

Jackson lib版本:jackson -core:2.0.0,jackson-databind:2.9.0

+0

'HashMap map = new HashMap(); map.put(pojo.getRootId(),pojo); map.put(pojo2.getRootId(),pojo2); String json = new ObjectMapper()。writer()。writeValueAsString(map);' – varren

回答

0

只需创建一个包含“6”和“7”作为键的Map<String, MyPojo>,并将相应的POJO作为值,然后序列化该映射。

+0

非常感谢! –

0

您可以尝试使用Json Streams:

JsonFactory factory = new JsonFactory(); 
     JsonGenerator generator = factory.createGenerator(new PrintWriter(System.out)); 
    generator.configure(SerializationFeature.WRAP_ROOT_VALUE, true); 
generator.writeStartObject(); 
generator.writeObject(firstPojo); 
generator.writeObject(secondPojo); 
generator.writeEndObject();