有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java读取XML并巧妙地将其转换为JSON

我有一些代码,可以格式化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"
      }
   ]
}

任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

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

    语法

    公共静态JSONObject到JSONObject(java.lang.String)抛出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
    }}