java 使用Jackson拼合嵌套JSON对象

dgtucam1  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(125)

此问题的答案(Convert JSON many objects to single JSON using Jackson)说明了如何使用Jackson扁平化JSON
但是我的json是这样的

{
  "field1":"value1",
  "field2":"value2",
  "field3": {
     "type":{
        "f1":"v1",
        "f2":"v2"
     }
  }
}

我需要这样的东西

{
  "field1":"value1",
  "field2":"value2",
  "field3": {
        "f1":"v1",
        "f2":"v2"
  }
}

以便将field3.type直接放入field3中,然后反序列化为Json对象
我需要使用Jackson注解而不是通过解压缩嵌套对象来执行此操作的步骤。

6yt4nkrj

6yt4nkrj1#

对field3的构造函数使用@JsonCreator注解:

public class Flattened implements Serializable {

    static ObjectMapper objectMapper = new ObjectMapper();
    
    public String field1;
    public String field2;
    public Field3Class field3;
    
    public static void main(String[] args) throws IOException {

        String jsonSerialised = "{\r\n" + 
                "  \"field1\":\"value1\",\r\n" + 
                "  \"field2\":\"value2\",\r\n" + 
                "  \"field3\": {\r\n" + 
                "     \"type\":{\r\n" + 
                "        \"f1\":\"v1\",\r\n" + 
                "        \"f2\":\"v2\"\r\n" + 
                "     }\r\n" + 
                "  }\r\n" + 
                "}  ";
        
        Flattened flattenedValue = objectMapper.readValue(jsonSerialised, Flattened.class);
        objectMapper.writeValue(System.out, flattenedValue);
    }
    
    public static class Field3Class implements Serializable {
        public String f1;
        public String f2;
        @JsonCreator
        public Field3Class(@JsonProperty("type") Type type) {
            this.f1 = type.f1;
            this.f2 = type.f2;
        }
        
        public static class Type implements Serializable {
            public String f1;
            public String f2;
       }
    }
}

输出:

{"field1":"value1","field2":"value2","field3":{"f1":"v1","f2":"v2"}}

相关问题