Вопрос:

Преобразуйте JSON много объектов в один JSON, используя Джексона

java json jackson

6002 просмотра

2 ответа

177 Репутация автора

У меня есть JSON с полем уровней различия, поэтому я хочу преобразовать в один JSON с полями с одним уровнем, например:

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

результат

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

Я использую Джексона с аннотацией @JsonProperty("field"), у меня нет проблем с полями первого уровня, но я не знаю, как получить доступ к полям, где вглубь внутри JSON, для этого примера prop4и prop5.

Автор: cflores29 Источник Размещён: 20.05.2013 04:43

Ответы (2)


0 плюса

598 Репутация автора

Попробуйте реализовать аннотацию @JsonUnwrapped. Более подробная информация на http://jackson.codehaus.org/1.9.9/javadoc/org/codehaus/jackson/annotate/JsonUnwrapped.html

Автор: Zerkz Размещён: 20.05.2013 05:16

21 плюса

2346 Репутация автора

Решение

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"}
Автор: Pascal Gélinas Размещён: 21.05.2013 02:20
Вопросы из категории :
32x32