Преобразование 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

Другие вопросы по тегам