Java語言中,XML和JSON都是常用的數據交換格式。XML格式相對來說較重,而JSON格式則比較輕量級,且在移動設備或者網絡傳輸中更為實用。對于Java開發者,需要將XML文件轉換成JSON格式,可以使用以下方法:
public static String xmlToJson(String xml) { JSONObject jsonObj = new JSONObject(); try { //將XML格式的字符串轉換成DOM對象 Document d = DocumentBuilderFactory.newInstance() .newDocumentBuilder() .parse(new InputSource(new StringReader(xml))); //將根節點作為JSON對象 jsonObj.put(d.getDocumentElement().getNodeName(), xmlToJsonHelper(d.getDocumentElement())); } catch (Exception e) { e.printStackTrace(); } return jsonObj.toString(); } private static JSONObject xmlToJsonHelper(Node node) { JSONObject obj = new JSONObject(); //如果是節點,將節點的子節點作為JSON對象 if (node.hasChildNodes()) { NodeList nl = node.getChildNodes(); for (int i = 0; i< nl.getLength(); i++) { Node childNode = nl.item(i); //如果是文本節點,將文本節點的內容作為JSON的值 if (childNode.getNodeType() == Node.TEXT_NODE) { obj.put("#text", childNode.getTextContent()); } else { if (obj.has(childNode.getNodeName())) { if (!(obj.get(childNode.getNodeName()) instanceof JSONArray)) { JSONArray jsonArray = new JSONArray(); jsonArray.put(obj.get(childNode.getNodeName())); obj.put(childNode.getNodeName(), jsonArray); } ((JSONArray) obj.get(childNode.getNodeName())).put(xmlToJsonHelper(childNode)); } else { obj.put(childNode.getNodeName(), xmlToJsonHelper(childNode)); } } } } //處理屬性節點 if (node.getAttributes() != null) { NamedNodeMap nnm = node.getAttributes(); for (int i = 0; i< nnm.getLength(); i++) { Node attr = nnm.item(i); obj.put("@" + attr.getNodeName(), attr.getNodeValue()); } } return obj; }
上面的代碼中使用了JSONObject和JSONArray類,它們可以很方便的轉換成JSON格式的字符串。此外,代碼中的方法也使用了遞歸,便于處理XML的嵌套節點。
使用上述方法可以將XML格式的字符串轉換成JSON格式的字符串,具有實用性和可行性。當然,對于比較復雜的XML文件,還需要根據具體情況做出相應的修改。