【问题标题】:Convert JSON many objects to single JSON using Jackson使用 Jackson 将 JSON 多个对象转换为单个 JSON
【发布时间】:2013-05-20 16:43:18
【问题描述】:

我有 JSON,具有不同级别的字段,因此我想将其转换为具有一级字段的单个 JSON:

{
  "prop1":"value1",
  "prob2":"value2",
  "prop3": {
     "prop4":"value4",
     "prop5":"value5"
  }
  ... many level fields
}  

结果

{
  "prop1":"value1",
  "prop2":"value2",
  "prop4":"value4",
  "prop5":"value5"
  .......
}

我正在使用带有注释@JsonProperty("field") 的 Jackson,我对第一级字段没有问题,但我不知道如何访问字段在 JSON 中的更多内容,例如 prop4prop5

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    JsonUnwrapped 是要使用的注解,它甚至适用于多级嵌套。例如:

    @RunWith(JUnit4.class)
    public class Sample {
    
        @Test
        public void testName() throws Exception {
            SampleClass sample = new SampleClass("value1", "value2", new SubClass("value4", "value5", new SubSubClass("value7")));
            new ObjectMapper().writeValue(System.out, sample);
        }
    
        @JsonAutoDetect(fieldVisibility=Visibility.ANY)
        public static class SampleClass {
            private String prop1;
            private String prop2;
            @JsonUnwrapped
            private SubClass prop3;
    
            public SampleClass(String prop1, String prop2, SubClass prop3) {
                this.prop1 = prop1;
                this.prop2 = prop2;
                this.prop3 = prop3;
            }
        }
        @JsonAutoDetect(fieldVisibility=Visibility.ANY)
        public static class SubClass {
            private String prop4;
            private String prop5;
            @JsonUnwrapped
            private SubSubClass prop6;
            public SubClass(String prop4, String prop5, SubSubClass prop6) {
                this.prop4 = prop4;
                this.prop5 = prop5;
                this.prop6 = prop6;
            }
    
        }
        @JsonAutoDetect(fieldVisibility=Visibility.ANY)
        public static class SubSubClass{
            private String prop7;
    
            public SubSubClass(String prop7) {
                this.prop7 = prop7;
            }
        }
    }
    

    会生成

    {"prop1":"value1","prop2":"value2","prop4":"value4","prop5":"value5","prop7":"value7"}
    

    【讨论】:

    • 太棒了!!! ,非常感谢您提供的信息,是 JsonUnwrapped 的一个很好的替代方案,但是需要使用提到的注释创建第二个实现类,下一个问题是无论如何都存在生成所有未包装的 json 字段,只修改映射器功能?
    • 如果不想修改原来的类,可以使用 Mixin 机制:wiki.fasterxml.com/JacksonMixInAnnotations。不,没有这样的功能可以在ObjectMapper 上激活。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 2016-06-17
      • 2018-07-19
      相关资源
      最近更新 更多