[英]How to access JSON subfield using @JsonProperty annotation?
我需要在另一個不同的json中轉換json,我使用@JsonProperty批注來更改名稱字段JSON結果,但是我不知道訪問字段封裝在不同的json級別中,例如:
{ "prop1" : "value1",
"prop2" : "value2",
"prop3" : {
"prop4" : "value4",
"prop5" : {
"prop6" : "value6"
}
}
}
json結果
{
"prop1_new_name":"value1",
"prop4_new_name":"value4",
"prop6_new_name":"value6"
}
這似乎是您上一個問題的延續。 因此,除了按照答案中的說明使用@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"}
反序列化時,“ prop3”將是Java對象中的Map(如果正確注釋了它)。 然后,您可以創建一個自定義JsonSerializer來輸出您的預期結果。
要創建自定義JsonSerializer,您可以按照以下指南進行操作: http ://dev.sghill.net/2012/04/how-do-i-write-jackson-json-serializer.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.