java xml 转json

原创admin 分类:热门问答 0

java xml 转json
在现代软件开发中,数据格式的转换是一项常见的任务。XML和JSON作为两种流行的数据交换格式,它们在结构和用途上有着显著的差异。XML以其结构化和可扩展性而闻名,而JSON则以其轻量级和易于解析而受到青睐。作为一名Java开发者,掌握这两种格式的转换不仅能够提升数据处理的灵活性,还能够在不同的应用场景中做出更合适的选择。

定义与目的

XML(eXtensible Markup Language)是一种标记语言,用于存储和传输数据。它具有自描述性,可以定义复杂的数据结构。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

区别与重要知识点

XML:

  • 严格的层次结构。
  • 支持注释和复杂的数据类型。
  • 通常文件较大,解析速度较慢。

JSON:

  • 更简洁,易于快速解析。
  • 没有注释,不支持复杂的数据类型。
  • 通常文件较小,解析速度较快。
对比表格
特性 XML JSON
结构 严格的层次结构 轻量级,易于解析
可读性 较差,标记语言,标签多 较好,格式简洁
扩展性 强,可以自定义标签 较弱,依赖标准结构
文件大小 通常较大 通常较小
解析速度 较慢 较快
用途 数据存储和传输,适合复杂数据结构 数据交换,适合Web应用
标准 W3C标准 RFC 7159标准
核心类与方法

在Java中,处理XML和JSON转换的核心类和方法通常涉及以下库:

XML处理:

  • DocumentBuilderFactory: 创建文档构建器,用于解析XML文档。
  • DocumentBuilder: 使用构建器解析XML文档。
  • Transformer: 用于将DOM树转换为XML文档。

JSON处理:

  • org.json: 提供了JSONObjectJSONArray类,用于创建和操作JSON对象。
  • Jackson: 提供了ObjectMapper类,用于将Java对象转换为JSON字符串,反之亦然。
使用场景
  • XML: 当数据结构复杂,需要严格的层次结构和数据完整性时使用。
  • JSON: 当需要快速传输和解析数据,或者与Web应用交互时使用。
代码案例

XML转JSON案例:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.json.JSONObject;
import java.io.FileInputStream;

public class XmlToJsonConverter {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new FileInputStream("example.xml"));

        JSONObject json = new JSONObject();
        json = convertDomToJSON(document);

        System.out.println(json.toString(4)); // 使用4个空格进行格式化
    }

    private static JSONObject convertDomToJSON(Node node) {
        JSONObject json = new JSONObject();
        String nodeName = node.getNodeName().replaceAll(":.*", "");
        if (node.hasAttributes()) {
            NamedNodeMap attrs = node.getAttributes();
            for (int i = 0; i < attrs.getLength(); ++i) {
                Attr attr = (Attr) attrs.item(i);
                json.put(nodeName + "_" + attr.getName(), attr.getValue());
            }
        }
        if (node.hasChildNodes()) {
            for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) {
                if (child.getNodeType() == Node.ELEMENT_NODE) {
                    json.accumulate(nodeName, convertDomToJSON(child));
                } else if (child.getNodeType() == Node.TEXT_NODE) {
                    json.put(nodeName, child.getNodeValue());
                }
            }
        }
        return json;
    }
}

JSON转XML案例:

import org.json.JSONArray;
import org.json.JSONObject;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import java.io.StringWriter;

public class JsonToXmlConverter {
    public static void main(String[] args) throws Exception {
        String jsonStr = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
        JSONObject jsonObj = new JSONObject(jsonStr);

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.newDocument();

        Element root = document.createElement("Person");
        document.appendChild(root);

        addJsonToElement(jsonObj, root, document);

        writeDocumentToXMLFile(document, "example.xml");
    }

    private static void addJsonToElement(JSONObject jsonObj, Element parent, Document doc) {
        for (String key : jsonObj.keySet()) {
            String value = jsonObj.getString(key);
            if (value.startsWith("{")) {
                Element child = doc.createElement(key);
                parent.appendChild(child);
                addJsonToElement(new JSONObject(value), child, doc);
            } else {
                Element child = doc.createElement(key);
                child.appendChild(doc.createTextNode(value));
                parent.appendChild(child);
            }
        }
    }

    private static void writeDocumentToXMLFile(Document doc, String filename) throws Exception {
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
        DOMSource source = new DOMSource(doc);
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        transformer.transform(source, result);
        String xmlString = writer.getBuffer().toString();
        System.out.println(xmlString);
        // 将xmlString写入文件
    }
}
相关问题及回答表格
问题 回答
XML和JSON的主要区别是什么? XML是严格的层次结构,支持复杂数据类型,而JSON轻量级,易于解析。
何时应该使用XML格式? 当数据结构复杂,需要数据完整性和层次结构时。
何时应该使用JSON格式? 当需要快速传输和解析数据,或者与Web应用交互时。
Java中有哪些常用的XML处理库? JAXP(包括DocumentBuilderFactory和DocumentBuilder)
Java中有哪些常用的JSON处理库? org.json和Jackson(ObjectMapper类)
如何在Java中将XML转换为JSON? 使用DocumentBuilderFactory解析XML,然后手动或使用工具将解析后的数据结构转换为JSON。
如何在Java中将JSON转换为XML? 使用JSONObject解析JSON,然后构建DOM树并转换为XML。

以上代码案例和表格内容提供了XML与JSON转换的基本思路和实现方法。在实际应用中,开发者应根据具体需求选择合适的转换方式和工具。

上一篇:java xml 解析

下一篇:java xml

猜你喜欢

领取相关Java架构师视频资料

网络安全学习平台视频资料