【问题标题】:Convert JSON to XML in Java with different JSON object names使用不同的 JSON 对象名称在 Java 中将 JSON 转换为 XML
【发布时间】:2017-08-06 09:35:19
【问题描述】:

我有这个 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>>

,但现在我不知道该怎么办。

有什么建议吗?

【问题讨论】:

  • 你有一个像 Data(Caption, Value) 这样的对象,用杰克逊你得到一个 Map ?然后,如果您在 Data 上添加 jaxb 注释,您可以将列表写入 .. ...... 这是您的问题吗?
  • 解决了我的问题。
  • 您最好创建一个带有字符串标题、字符串值的类,并从 JSON 中获取 的映射,然后您可以从 map.values() 创建一个 Collection可以用 jaxb 序列化为 XML。
  • 好的,我有一个带有字符串标题的类 Row,值。我是否使用 ObjectMapper readValue 从 JSON 映射到 Map?如果是这样,第二个参数应该是什么? HashMap nestedMap = jsonMapper.readValue(jsonSchemaString, ?);
  • 你需要使用如下类型:TypeReference> type = new TypeReference>() {};

标签: java json xml jackson format-conversion


【解决方案1】:

您需要将 JSON 读取为 Map&lt;String, Object&gt; 并创建一个包含标题和值字段的 Row 对象。之后,您需要遍历地图中区分地图和地图列表的条目。在地图的情况下,这些需要转换为 Row 对象并添加到行对象的集合中。对于地图列表,同样的事情需要在内部循环中完成。迭代完成后,需要将行添加到包装器对象中,然后可以使用 XmlMapper 将其转换为 xml。

我创建了一个适用于您的示例的要点: https://gist.github.com/santmatthew/8f85399ad86fb45fec0be0c5df1a9825

【讨论】:

  • 不错!有没有办法将父 指定为 ?
  • 如果JSON包含一个数组,你知道该怎么做:“childrenInfo”:[{“gender”:{“caption”:“Gender”,“value”:“Boy” }, "provider": { "caption": "Provider", "value": "Yes" }, "age": { "caption": "Age", "value": "5" } }, }]
  • 我不确定您是指将行重命名为表还是将根元素重命名为表。无论如何,我会给你一个答案。在情况 1 中,您需要做的就是将 getRow() 的 JsonProperty 注释中的值从“Row”更改为“Table”。如果您想更改根元素名称,即在这种情况下为 XmlWrapper,您可以将类从 XmlWrapper 重命名为 Table,或者在类声明中添加注释 @JacksonXmlRootElement(localName="Table")。
  • 对于数组的情况,您需要给我一个完整的输入以及您期望输出的样子,因为有很多可能的解释。
  • 你的代码给出了输出:
  • Buy a goat500000我正在考虑重命名外行。
    Purpose 山羊数量
猜你喜欢
  • 2020-02-02
  • 2021-07-23
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多