【问题标题】:Reading XML and converting it to JSON Smartly读取 XML 并巧妙地将其转换为 JSON
【发布时间】:2020-06-02 11:08:50
【问题描述】:

我有代码可以进行格式化并将 XML 转换为 JSON,但它的变化很大而且让人昏昏欲睡。我需要从 XML 中挑选大约 50 个元素并使用这些元素格式化 JSON。很多部分在重复,但元素不同。 下面是代码:-

private String createBrokeredMessage(String payload) {
    String message = "";
    String Ver = "";
    String ID = "";
            |
            |   
    String Rec = "";
    String default1 = "[]";

    try {
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        InputSource src = new InputSource();
        src.setCharacterStream(new StringReader(payload));

        Document doc = builder.parse(src);
        NodeList n1 = doc.getElementsByTagName("Ver");
        if (n1.getLength() > 0) {
            Ver = n1.item(0).getTextContent();
            if(Ver == "") {
                Ver = default1;
            }
            else {
                Ver = "\""+Ver+"\"";
            }
        }

        NodeList n2 = doc.getElementsByTagName("ID");
        if (n2.getLength() > 0) {
            ID = n2.item(0).getTextContent();
            if(ID == "") {
                ID = default1;
            }
            else {
                ID = "\""+ID+"\"";
            }
        }
        //|
        //|
        //|
        //|
        //|
        //|

        NodeList n49 = doc.getElementsByTagName("Rec");
        if (n49.getLength() > 0) {
            Rec = n49.item(0).getTextContent();
            if(Rec == "") {
                Rec = default1;
            }
            else {
                Rec = "\""+Rec+"\"";
            }
        }

        message = "{\"Envelope\":{\"Ver\":"+Ver+",\"ID\":"+ID+-------------------",\"Rec\":"+Rec+"}]}";
        System.out.println("Created message with ID" + message);
    } catch (Exception e){
            e.printStackTrace();
    }

    return message;
}

示例 XML:-

<?xml Version="1.0" encoding="UTF-8" standalone="no"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Envelope>
    <Ver>1.13</Ver>
    <ID>SAO</ID>
    <Rec>men</Rec>
    <TransactionID>0987714805168</TransactionID>
  </Envelope>
  <Code>124</Code>
  <City></City>
  <CompCodes>
    <CompCode>US</CompCode>
    <Vend>13</Vend>
  </CompCodes>
  <BankData>
    <Code>123</Code>
    <BankAcctNum>231</BankAcctNum>
  </BankData>
  <BankData>
    <Code>124</Code>
    <BankAcctNum>431</BankAcctNum>
  </BankData>
</Data>

输出 JSON:-

{
   "Envelope": {
      "Ver": "1.13",
      "ID": "SAO",
      "Rec": "men",
      "TransactionID": "0987714805168"
   },
   "Code": "124",
   "City": [],
   "CompCodes": [{
      "CompCode": "US",
      "Vend": "13"
   }],
   "BankData": [
      {
         "Code": "123",
         "BankAcctNum": "231"
      },
      {
         "Code": "124",
         "BankAcctNum": "431"
      }
   ]
}

任何帮助将不胜感激!

【问题讨论】:

  • 请添加示例输入xml和输出json数据
  • 嗨@Ackdari,我已经添加了示例
  • Underscore-java库可以将xml转json。 U.xmlToJson(xml) 方法会有所帮助。
  • 嗨@ValentynKolesnikov,我不能使用外部库..它必须是标准的Java库,如org.json。*
  • 嗨@Sahilkhan。您可以将源代码复制到您的项目中。

标签: java json xml


【解决方案1】:

您可以使用 JSON Jackson 快速轻松地将 XML 转换为 JSON。

public static void main(String[] args) {
    String xml = "<?xml Version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
        + "<Data xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
        + "  <Envelope>\n"
        + "    <Ver>1.13</Ver>\n"
        + "    <ID>SAO</ID>\n"
        + "    <Rec>men</Rec>\n"
        + "    <TransactionID>0987714805168</TransactionID>\n"
        + "  </Envelope>\n"
        + "  <Code>124</Code>\n"
        + "  <City></City>\n"
        + "  <CompCodes>\n"
        + "    <CompCode>US</CompCode>\n"
        + "    <Vend>13</Vend>\n"
        + "  </CompCodes>\n"
        + "  <BankData>\n"
        + "    <Code>123</Code>\n"
        + "    <BankAcctNum>231</BankAcctNum>\n"
        + "  </BankData>\n"
        + "  <BankData>\n"
        + "    <Code>124</Code>\n"
        + "    <BankAcctNum>431</BankAcctNum>\n"
        + "  </BankData>\n"
        + "</Data>";

    JSONObject json = XML.toJSONObject(xml);
    System.out.println(json.toString());
}

添加依赖:

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

请看这里:https://www.techiedelight.com/convert-xml-to-json-in-java/

【讨论】:

    【解决方案2】:

    我们可以使用 org.json.XML 类将 XML 转换为 JSON 数组,它提供了一个静态方法 XML.toJSONObject() 来将 XML 转换为 JSON 数组。

    语法

    public static JSONObject toJSONObject(java.lang.String string) throws JSONException

    在下面的示例中,将 XML 转换为 JSON 数组

       import org.json.*;
       public class ConvertXMLToJSONArrayTest {
       public static String xmlString= "<?xml version=\"1.0\" ?><root><test       attrib=\"jsontext1\">tutorialspoint</test><test attrib=\"jsontext2\">tutorix</test></root>";
       public static void main(String[] args) {
          try {
           JSONObject json = XML.toJSONObject(xmlString); // converts xml to json
           String jsonPrettyPrintString = json.toString(4); // json pretty print
           System.out.println(jsonPrettyPrintString);
          } catch(JSONException je) {
             System.out.println(je.toString());
          }
        }
     }
    

    在您的情况下,代码将是...

    import org.json.*;
    public class ConvertXMLToJSONArrayTest {
    public static String xmlString= "<?xml Version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
        "<Data xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
        "<Envelope><Ver>1.13</Ver><ID>SAO</ID><Rec>men</Rec><TransactionID>0987714805168</TransactionID>"+
        "</Envelope><Code>124</Code><City></City><CompCodes><CompCode>US</CompCode><Vend>13</Vend></CompCodes>"+
        "<BankData><Code>123</Code><BankAcctNum>231</BankAcctNum></BankData><BankData><Code>124</Code><BankAcctNum>431</BankAcctNum>"+
        "</BankData></Data>";
        public static void main(String[] args) {
      try {
         JSONObject json = XML.toJSONObject(xmlString); // converts xml to json
         String jsonPrettyPrintString = json.toString(4); // json pretty print
         System.out.println(jsonPrettyPrintString);
      } catch(JSONException je) {
         System.out.println(je.toString());
      }
      }
     }
    

    输出:

    {"Data": {
    "CompCodes": {
        "CompCode": "US",
        "Vend": 13
    },
    "BankData": [
        {
            "BankAcctNum": 231,
            "Code": 123
        },
        {
            "BankAcctNum": 431,
            "Code": 124
        }
    ],
    "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
    "City": "",
    "Envelope": {
        "Rec": "men",
        "Ver": 1.13,
        "ID": "SAO",
        "TransactionID": "0987714805168"
    },
    "Code": 124
    }}
    

    【讨论】:

    • 您好,感谢您的帮助!但是,如果您比较我想要的输出和您的输出,JSON 1) 中不应该存在“数据”元素。 2)"xmlns:xsi":"w3.org/2001/XMLSchema-instance",不应出现。 3) JSON 中没有空元素 City 4) 所有值都应该用双引号括起来。
    • 希望对您有所帮助...可能在我选择 json 的 jar 文件时有些问题...您可以尝试使用 maven 的其他 json jar .....
    猜你喜欢
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多