使用不同的 JSON 对象名称将 JSON 转换为 Java 中的 XML
Convert JSON to XML in Java with different JSON object names
我有这个 JSON 字符串:
{
"purpose": {
"caption": "Purpose",
"value": "Buy a goat"
},
"goatValue": {
"caption": "Goat value",
"value": "4500000"
},
"loanAmount": {
"caption": "Loan amount",
"value": "5000000"
},
"childrenInfo": [{
"gender": {
"caption": "Gender",
"value": "Boy"
},
"provider": {
"caption": "Provider",
"value": "Yes"
},
"age": {
"caption": "Age",
"value": "5"
}
},
{
"gender": {
"caption": "Gender",
"value": "Girl"
},
"provider": {
"caption": "Provider",
"value": "No"
},
"age": {
"caption": "Age",
"value": "17"
}
}]
}
我想把它转换成这个xml结构:
<Row>
<caption>Purpose</caption>
<value>Buy a goat</value>
</Row>
<Row>
<caption>Goat value</caption>
<value>4500000</value>
</Row>
<Row>
<caption>Loan amount</caption>
<value>5000000</value>
</Row>
<Row>
<caption>Gender</caption>
<value>Boy</value>
</Row>
<Row>
<caption>Provider</caption>
<value>Yes</value>
</Row>
<Row>
<caption>Age</caption>
<value>5</value>
</Row>
<Row>
<caption>Gender</caption>
<value>Girl</value>
</Row>
<Row>
<caption>Provider</caption>
<value>No</value>
</Row>
<Row>
<caption>Age</caption>
<value>17</value>
</Row>
假设这适用于任何 JSON 对象名称(在本例中为 purpose,goatValue 和 loanAmount),因为无法知道 JSON 对象的名称。我试过使用 Jackson ObjectMapper 并将 JSON 字符串映射到
HashMap<String, HashMap<String, String>>
,但现在我不知道该怎么办。
有什么建议吗?
您需要将 JSON 读取为 Map<String, Object>
并创建一个包含标题和值字段的 Row
object。之后,您需要遍历地图中的条目以区分地图和地图列表。对于地图,这些需要转换为行 object 并添加到行 object 的 collection 中。对于地图列表,同样的事情需要在内循环中完成。迭代完成后,需要将行添加到包装器 object,然后可以使用 XmlMapper 将其转换为 xml。
我创建了一个适用于您的示例的要点:
https://gist.github.com/santmatthew/8f85399ad86fb45fec0be0c5df1a9825
我有这个 JSON 字符串:
{
"purpose": {
"caption": "Purpose",
"value": "Buy a goat"
},
"goatValue": {
"caption": "Goat value",
"value": "4500000"
},
"loanAmount": {
"caption": "Loan amount",
"value": "5000000"
},
"childrenInfo": [{
"gender": {
"caption": "Gender",
"value": "Boy"
},
"provider": {
"caption": "Provider",
"value": "Yes"
},
"age": {
"caption": "Age",
"value": "5"
}
},
{
"gender": {
"caption": "Gender",
"value": "Girl"
},
"provider": {
"caption": "Provider",
"value": "No"
},
"age": {
"caption": "Age",
"value": "17"
}
}]
}
我想把它转换成这个xml结构:
<Row>
<caption>Purpose</caption>
<value>Buy a goat</value>
</Row>
<Row>
<caption>Goat value</caption>
<value>4500000</value>
</Row>
<Row>
<caption>Loan amount</caption>
<value>5000000</value>
</Row>
<Row>
<caption>Gender</caption>
<value>Boy</value>
</Row>
<Row>
<caption>Provider</caption>
<value>Yes</value>
</Row>
<Row>
<caption>Age</caption>
<value>5</value>
</Row>
<Row>
<caption>Gender</caption>
<value>Girl</value>
</Row>
<Row>
<caption>Provider</caption>
<value>No</value>
</Row>
<Row>
<caption>Age</caption>
<value>17</value>
</Row>
假设这适用于任何 JSON 对象名称(在本例中为 purpose,goatValue 和 loanAmount),因为无法知道 JSON 对象的名称。我试过使用 Jackson ObjectMapper 并将 JSON 字符串映射到
HashMap<String, HashMap<String, String>>
,但现在我不知道该怎么办。
有什么建议吗?
您需要将 JSON 读取为 Map<String, Object>
并创建一个包含标题和值字段的 Row
object。之后,您需要遍历地图中的条目以区分地图和地图列表。对于地图,这些需要转换为行 object 并添加到行 object 的 collection 中。对于地图列表,同样的事情需要在内循环中完成。迭代完成后,需要将行添加到包装器 object,然后可以使用 XmlMapper 将其转换为 xml。
我创建了一个适用于您的示例的要点: https://gist.github.com/santmatthew/8f85399ad86fb45fec0be0c5df1a9825