Преобразование JSON в XML в Java с разными именами объектов JSON
У меня есть эта строка 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 (в данном случае, goatValue и loanAmount), потому что нет способа узнать имена объектов JSON. Я пытался использовать Jackson ObjectMapper и сопоставил строку JSON
HashMap<String, HashMap<String, String>>
, но сейчас я не знаю, что делать.
Какие-либо предложения?
1 ответ
Вам нужно прочитать JSON как Map<String, Object>
и создать Row
объект, состоящий из поля заголовка и значения. После этого вам нужно перебрать записи на карте, различая карты и списки карт. В случае карт их необходимо преобразовать в объекты строк и добавить в коллекцию объектов строк. В случае списков карт, то же самое нужно сделать во внутреннем цикле. Когда итерация завершена, строки необходимо добавить в объект-оболочку, который затем можно преобразовать в xml с помощью XmlMapper.
Я создал суть, которая работает на вашем примере: https://gist.github.com/santmatthew/8f85399ad86fb45fec0be0c5df1a9825