1. 程式人生 > >JSON對象與XML相互轉換工具類

JSON對象與XML相互轉換工具類

reat lse 1.2 ace 文件內容 apache 相互 order content

依賴jar

        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <
artifactId>fastjson</artifactId> <version>1.2.56</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version>
</dependency>

JsonXmlUtils.java

package javax.utils;

import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.URL;
import java.nio.file.Paths;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.xml.sax.SAXException; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; /** * JSON對象與XML相互轉換工具類 * * @author Logan * @createDate 2019-02-12 * @version 1.0.0 * */ public class JsonXmlUtils { private static final String ENCODING = "UTF-8"; /** * JSON對象轉漂亮的xml字符串 * * @param json JSON對象 * @return 漂亮的xml字符串 * @throws IOException * @throws SAXException */ public static String jsonToPrettyXml(JSONObject json) throws IOException, SAXException { Document document = jsonToDocument(json); /* 格式化xml */ OutputFormat format = OutputFormat.createPrettyPrint(); // 設置縮進為4個空格 format.setIndent(" "); format.setIndentSize(4); StringWriter formatXml = new StringWriter(); XMLWriter writer = new XMLWriter(formatXml, format); writer.write(document); return formatXml.toString(); } /** * JSON對象轉xml字符串 * * @param json JSON對象 * @return xml字符串 * @throws SAXException */ public static String JsonToXml(JSONObject json) throws SAXException { return jsonToDocument(json).asXML(); } /** * JSON對象轉Document對象 * * @param json JSON對象 * @return Document對象 * @throws SAXException */ public static Document jsonToDocument(JSONObject json) throws SAXException { Document document = DocumentHelper.createDocument(); document.setXMLEncoding(ENCODING); // root對象只能有一個 for (String rootKey : json.keySet()) { Element root = jsonToElement(json.getJSONObject(rootKey), rootKey); document.add(root); break; } return document; } /** * JSON對象轉Element對象 * * @param json JSON對象 * @param nodeName 節點名稱 * @return Element對象 */ public static Element jsonToElement(JSONObject json, String nodeName) { Element node = DocumentHelper.createElement(nodeName); for (String key : json.keySet()) { Object child = json.get(key); if (child instanceof JSONObject) { node.add(jsonToElement(json.getJSONObject(key), key)); } else { Element element = DocumentHelper.createElement(key); element.setText(json.getString(key)); node.add(element); } } return node; } /** * XML字符串轉JSON對象 * * @param xml xml字符串 * @return JSON對象 * @throws DocumentException */ public static JSONObject xmlToJson(String xml) throws DocumentException { JSONObject json = new JSONObject(); SAXReader reader = new SAXReader(); Document document = reader.read(new StringReader(xml)); Element root = document.getRootElement(); json.put(root.getName(), elementToJson(root)); return json; } /** * Element對象轉JSON對象 * * @param element Element對象 * @return JSON對象 */ public static JSONObject elementToJson(Element element) { JSONObject json = new JSONObject(); for (Object child : element.elements()) { Element e = (Element) child; if (e.elements().isEmpty()) { json.put(e.getName(), e.getText()); } else { json.put(e.getName(), elementToJson(e)); } } return json; } /** * 文件內容轉換成字符串 * * @param filePath 文件路徑 * @return 內容字符串 * @throws IOException */ public static String fileToString(URL filePath) throws IOException { return IOUtils.toString(filePath, ENCODING); } /** * 文件內容轉換成字符串 * * @param filePath 文件路徑 * @return 內容字符串 * @throws IOException */ public static String fileToString(String filePath) throws IOException { return IOUtils.toString(Paths.get(filePath).toUri(), ENCODING); } /** * 字符串輸出到文件 * * @param str 字符串內容 * @param filePath 文件路徑 * @throws IOException */ public static void stringToFile(String str, String filePath) throws IOException { FileUtils.writeStringToFile(Paths.get(filePath).toFile(), str, ENCODING); } /** * 字符串輸出到文件 * * @param str 字符串內容 * @param filePath 文件路徑 * @throws IOException */ public static void stringToFile(String str, URL filePath) throws IOException { FileUtils.writeStringToFile(new File(filePath.getPath()), str, ENCODING); } /** * 字符串輸出到文件 * * @param str 字符串內容 * @param file 輸出文件 * @throws IOException */ public static void stringToFile(String str, File file) throws IOException { FileUtils.writeStringToFile(file, str, ENCODING); } public static void main(String[] args) { try { String filePath = "/User.xml"; URL url = JsonXmlUtils.class.getResource(filePath); String content = JsonXmlUtils.fileToString(url); // System.out.println(content); JSONObject json = xmlToJson(content); System.out.println(JSON.toJSONString(json, true)); String xml = JsonToXml(json); System.out.println(xml); System.out.println("----------------------------------------\n\n"); xml = jsonToPrettyXml(json); System.out.println(xml); stringToFile(xml, "G:\\Temp\\Test\\User.xml"); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } } }

測試文件

User.xml

<?xml version="1.0" encoding="UTF-8"?>
<entity>
    <user>
        <id>1001</id>
        <username>Logan</username>
        <password>666666</password>
        <age>16</age>
    </user>
    <order>
        <id>2001</id>
        <price>9.99</price>
        <date>2019-02-12</date>
    </order>
</entity>

.

JSON對象與XML相互轉換工具類