簡體   English   中英

Spring & Jackson - JSON 自定義列表 XML

[英]Spring & Jackson - JSON list to custom XML

我有以下 JSON 格式的輸入(地址列表可以更長):

{
    "name": "Edward",
    "address": [
        {
            "streetName": "value1",
            "city": "value2"
        },
        {
            "streetName": "value3",
            "city": "value4"
        }
    ]
}

我需要像這樣將其轉換為 XML:

<root>
    <name>Edward</name>
    <streetName1>value1</streetName1>
    <city1>value2</city1>
    <streetName2>value3</streetName2>
    <city2>value4</city2>
</root>

我試過這樣做:

@JacksonXmlElementWrapper(useWrapping = false)
private List<Address> address = new ArrayList<>();

但我得到的是:

<root>
    <name>Edward</name>
    <address>
        <streetName>value1</streetName>
        <city>value2</city>
    </address>
    <address>
        <streetName>value3</streetName>
        <city>value4</city>
    </address>
</root>

請幫助我獲得所需的格式! 任何幫助將非常感激 ! 謝謝!

可以使用自定義序列化程序解決您的問題,因此如果您有如下所示的Person class:

@JacksonXmlRootElement(localName = "root")
@JsonSerialize(using = PersonSerializer.class)
public class Person {

    private String name;

    private List<Address> address = new ArrayList<>();

}

您可以構建自定義PersonSerializer序列化程序 class 擴展JsonSerializer class 如下所示:

public class PersonSerializer extends JsonSerializer<Person> {

    @Override
    public void serialize(Person t, JsonGenerator jg, SerializerProvider sp) throws IOException {
        String streetName = "streetName";
        String city = "city";
        int nStreet = 1;
        int nCity = 1;
        jg.writeStartObject();
        jg.writeStringField("name", t.getName());
        for (Address address : t.getAddress()) {

            jg.writeStringField(streetName + String.valueOf(nStreet++), address.getStreetName());
            jg.writeStringField(city + String.valueOf(nCity++), address.getCity());

        }
        jg.writeEndObject();
    }

}

然后你可以像下面這樣序列化你的Person object 獲得你期望的 xml 結果:

XmlMapper xmlMapper = new XmlMapper();
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
//you already have your person object to serialize
String result = xmlMapper.writeValueAsString(person);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM