0

json を別の異なる json に変換する必要があります。変更名フィールドの JSON 結果に @JsonProperty アノテーションを使用していますが、アクセス フィールドが異なる json レベルでカプセル化されているかどうかはわかりません。

{  "prop1" : "value1",
   "prop2" : "value2",
   "prop3" : {
     "prop4" : "value4",
     "prop5" : {
        "prop6" : "value6"
     } 
  }
}

jsonの結果

  { 
    "prop1_new_name":"value1",
    "prop4_new_name":"value4",
    "prop6_new_name":"value6"  
  }
4

2 に答える 2

1

これは前の質問の続きのようです。したがって、回答で説明されているように使用することに加えて、それが宣言されているクラスのフィールド@JsonUnwrappedを追加する必要があります。@JsonProperty前の回答を変更すると、次のようになり@JsonPropertyます。

@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 {
        @JsonProperty("prop4_new_name")
        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{
        @JsonProperty("prop7_new_name")
        private String prop7;

        public SubSubClass(String prop7) {
            this.prop7 = prop7;
        }
    }
}

これにより、結果として:

{"prop2":"value2","prop5":"value5","prop7_new_name":"value7","prop4_new_name":"value4","prop1_new_name":"value1"}
于 2013-05-22T18:21:07.827 に答える
0

「prop3」は、デシリアライズ時に Java オブジェクトの Map になります (適切に注釈が付けられている場合)。次に、カスタム JsonSerializer を作成して、期待される結果を出力できます。

カスタム JsonSerializer を作成するには、次のガイドに従ってください: http://dev.sghill.net/2012/04/how-do-i-write-jackson-json-serializer.html

于 2013-05-22T17:18:08.457 に答える