【问题标题】:Map xml to Json将 xml 映射到 Json
【发布时间】:2018-09-06 06:12:58
【问题描述】:

我想将 xml 转换为 JSON。 示例:将下面的 xml 转换为给定的 json。

<header>
<students>
<info>
    <name>student1</name>
    <class>2</class>
</info>
<info>
<name>student2</name>
<class>3</class>
</info>
</students>
</header>

JSON:

{
"header": {
    "students": [
        {
            "name": "student1",
            "class": "2"
        },
        {
            "name": "student2",
            "class": "3"
        }
    ]
}
}

问题是,如何将元素转换成数组?

【问题讨论】:

  • 你可以关注这个novixys.com/blog/convert-xml-json
  • 可以看到以下链接stackoverflow.com/questions/1823264/…
  • 使用 XML 库读取 XML,使用 JSON 库写入 JSON。尽管有很多工具承诺进行 JSON/XML 转换,但他们会使用自己的约定来实现。如果您对给定输入 XML 的结果 JSON 有自己的目标,那么它们的约定对您不起作用,您只需要自己解决这两种格式。
  • 谁能给出一个使用 xsl 的解决方案。我试图使用这个链接中的那个:bjelic.net/2012/08/01/coding/convert-xml-to-json-using-xslt。它工作正常。除了只有当数组中有多个元素时它才能检测到 xml 数组。如果数组中只有一个元素,当转换为json时,它不被认为是数组
  • 如果我的answer 适合你,请告诉我。

标签: java arrays json xml


【解决方案1】:

您可以使用 org.json 库将 xml 字符串转换为 json 对象。

示例程序:

import org.json.me.JSONException;
import org.json.me.JSONObject;
import org.json.me.util.XML;

public class XmlToJson {

    public static void main(String args[]) throws JSONException
    {

        String sampleXML = "<COLLEGE><STUDENT><NAME>MACK</NAME><MARKS>90</MARKS></STUDENT><STUDENT><NAME>JACK</NAME><MARKS>82</MARKS></STUDENT></COLLEGE>";
        JSONObject jsonObject = new JSONObject(XML.toJSONObject(sampleXML).toString());
        System.out.println("XML: "+sampleXML);
        System.out.println("JSON: "+jsonObject);
    }

}

样本输出:

XML: <COLLEGE>
        <STUDENT>
           <NAME>MACK</NAME>
           <MARKS>90</MARKS>
        </STUDENT>
        <STUDENT>
           <NAME>JACK</NAME>
           <MARKS>82</MARKS>
        </STUDENT> 
     </COLLEGE>


JSON: {"COLLEGE": {
       "STUDENT": [
      {
        "MARKS": "90",
        "NAME": "MACK"
      },
      {
        "MARKS": "82",
        "NAME": "JACK"
      }
    ]
  }
}

【讨论】:

    【解决方案2】:

    我使用链接中提供的 xslt 进行了转换:https://www.bjelic.net/2012/08/01/coding/convert-xml-to-json-using-xslt/

    我面临的问题是,只有当有多个同名的 xml 元素时,这个 xslt 才会将 xml 数组转换为 json 数组。如果数组中只有一个 xml 元素,则不会将其转换为 JSON 数组。我通过使用我自己的条件编辑 xsl 解决了这个问题,我检查我想要的数组元素的名称并检查计数是否为零,然后为该条件添加 '[' 和 ']'。

    【讨论】:

      【解决方案3】:

      将以下依赖项添加到您的应用程序中:

      <dependency>
          <groupId>org.json</groupId>
          <artifactId>json</artifactId>
          <version>20180813</version>
      </dependency>
      

      它提供了一种将 XML 文档转换为 JSON 文档的非常简单的方法:

      String xml = "<header>\n" +
                   "  <students>\n" +
                   "    <info>\n" +
                   "      <name>student1</name>\n" +
                   "      <class>2</class>\n" +
                   "    </info>\n" +
                   "    <info>\n" +
                   "      <name>student2</name>\n" +
                   "      <class>3</class>\n" +
                   "    </info>\n" +
                   "   </students>\n" +
                   "</header>";
      
      JSONObject json = XML.toJSONObject(xml);
      System.out.println(json);
      

      输出将是:

      {"header":{"students":{"info":[{"name":"student1","class":2},{"name":"student2","class":3}]}}}
      

      然后你可以进行一些操作:

      JSONArray info = json.getJSONObject("header").getJSONObject("students").getJSONArray("info");
      json.getJSONObject("header").put("students", info);
      System.out.println(json);
      

      你会得到想要的输出:

      {"header":{"students":[{"name":"student1","class":2},{"name":"student2","class":3}]}}
      

      【讨论】:

        【解决方案4】:

        我尝试从您添加的 xml 字符串创建一个 jason。使用 c# 并能够获取 Jason 文件。您应该将 nuget 包 Newtonsoft.Json 添加到您的项目中。

         public void xmlToJason()
            {
                string xml = @"<header>
                                <students>
                                <info>
                                    <name>student1</name>
                                    <class>2</class>
                                </info>
                                <info>
                                <name>student2</name>
                                <class>3</class>
                                </info>
                                </students>
                                </header>";
        
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);
        
                string json = JsonConvert.SerializeXmlNode(doc);
        
                Console.WriteLine(json);
            }
        

        【讨论】:

        • 这很好,但 OP 提到了 Java。
        猜你喜欢
        • 2017-03-20
        • 1970-01-01
        • 1970-01-01
        • 2010-10-25
        • 2019-05-27
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        • 2021-04-13
        相关资源
        最近更新 更多