【问题标题】:Java convert XML to JSON and determine if array or objectJava 将 XML 转换为 JSON 并确定是数组还是对象
【发布时间】:2014-03-28 02:32:51
【问题描述】:

我需要将 XML 转换为 JSON,并且我有以下代码可以正常工作。然而,当一个 XML 元素实际上应该被转换为一个数组时,就会出现问题。我的问题分为两部分:

1) 在 xml 中表示数组的正确方法是什么?

这是我目前正在使用的 xml。元素的内容实际上应该是一个数组。所以 elements[0] 应该是里面的元素。

<project id="200">
    <name>test</name>
    <elements>
        <element>
            <id>body</id>
            <width>200</width>
            <height>400</height>
            <children/>
        </element>
    </elements>
</project>

2) 如何将 xml 转换为包含 JSON 数组和对象的 JSON?

private String xmlToJson(String xml) throws IOException {

    JSONObject jsonObject = XML.toJSONObject(xml);

    return jsonObject.toString(4);

} // End of XML to JSON

非常感谢

【问题讨论】:

  • 请在 SO stackoverflow.com/a/1823328/1759128 上查看之前的答案
  • 不幸的是,该解决方案没有回答我的问题,因为它没有单独列出数组
  • 最好的办法是使用 XML 工具将数组创建为 List,然后使用 JSON 工具将 List 转换为 JSON。
  • @HotLicks,这个问题是 - “怎么做”
  • @msangel - 怎么办?两者都有多种工具 - 只需将其中两个捆绑在一起即可。

标签: java xml json


【解决方案1】:

回答你的第一个问题:What is the proper way to represent an array in xml?

请参考:http://www.w3.org/2005/07/xml-schema-patterns.html#Vector

【讨论】:

    【解决方案2】:

    有一个带有静态方法U.xmlToJson(xml)underscore-java 库。它支持一个特殊的属性 array="true" 强制元素是一个数组。

    <project id="200">
        <name>test</name>
        <elements>
            <element array="true">
                <id>body</id>
                <width>200</width>
                <height>400</height>
                <children/>
            </element>
        </elements>
    </project>
    

    输出:

    {
      "project": {
        "-id": "200",
        "name": "test",
        "elements": [
          {
            "id": "body",
            "width": "200",
            "height": "400",
            "children": {
              "-self-closing": "true"
            }
          }
        ]
      },
      "#omit-xml-declaration": "yes"
    }    
    

    【讨论】:

    • 我知道我们有 MODE 可以将自闭合部分值替换为 null,我们是否有任何 MODE 可以用 EMPTY 替换
    • 我可以添加一个新模式REPLACE_SELF_CLOSING_WITH_EMPTY。
    • 它将在最近的版本中提供。
    • 是否有配置/方法可以从响应中丢弃“#omit-xml-declaration”键?
    • 我们可以借助 U.remove(map, key) 方法排除键。作为替代方案,您可以添加 xml 标头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2018-04-14
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多