我有以下 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
如下所示的類:
@JacksonXmlRootElement(localName = "root")
@JsonSerialize(using = PersonSerializer.class)
public class Person {
private String name;
private List<Address> address = new ArrayList<>();
}
您可以構建一個自定義PersonSerializer
序列化器類來擴展JsonSerializer
類,如下所示:
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
像下面一樣序列化你的對象,獲得你期望的 xml 結果:
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
//you already have your person object to serialize
String result = xmlMapper.writeValueAsString(person);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句