Java实现XML与JSON的互相转换详解

2025-03-20 01:50

本文主要是介绍Java实现XML与JSON的互相转换详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...

1. XML转JSON

1.1 代码目的

实现xml与json的互相转换,先实现xml -> json, 然后实现json -> xml字符串,最后xml字符串 -> 写入文件

XML结构时常会转换为JSON数据结构,感恩开源,有json的开源包帮忙解决问题。

1.2 代码实现

下面代码是xml转json的快速方法

public static String xmlToJson() throws Exception{
        //使用DOM4j
        SAXReader saxReader = new SAXReader();
        //读取文件
        Document read = saxReader.read("G:\\IDEAProjects\\JavaStudy\\Mooc\\src\\main\\resources\\score.xml");
        //使用json的xml转json方法
        JSONObject jsonObject = XML.toJSONObject(read.asXML());
        //设置缩进转为字符串
        System.out.println(jsonObject.toString(3));
        return jsonObject.toString(3);
    }

测试xml文件如下

<?xml version='1.0' encoding='UTF-8'?>
<student>
    <name>Tom</name>
    <subject>math</subject>
    <score>80</score>
</student>

输出结果:

{"student": 
 {
   "score": 80,
   "subject": "math",
   "name": "Tom"
 }
}

2. JSON转XML

    //json转换成xml
    public static String jsonToXml(String json){
        //输入流
        StringReader input = new StringReader(json);
        //输出流
        StringWriter output = new StringWriter();
        //构建配置文件
        JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(falsphpe).repairingNamespaces(false).build();
        try {
                //xml事件读
                //  This is the top level interface for parsing XML Events.  It provides
                //  the ability to peek at the next event and returns configuration
                //  information through the property interface.
                // 这是最解析XML事件最顶层的接口,它提供了查看下一个事件并通过属性界面返回配置信息的功能。
                XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(input);
                //这是编写XML文档的顶级界面。
js                //验证XML的形式不需要此接口的实例。
                XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(output);
                //创建一个实例使用默认的缩进和换行
                writer = new PrettyXMLEventWriter(writer);
                //添加整个流到输出流,调用next方法,知道hasnext返回false
                writer.add(reader);
                reader.close();
                writer.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
      python              try {
                            output.close();
                            input.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                     }
            //移除头部标签
            if (output.toString().length() >= 38) {
                System.out.println(output.toString().substring(39));
                return output.toString().substring(39);
            }
        System.out.println(output);
        return output.toString();
    }

传入的json字符串即上xml转json中输出的,json转xml的结果如下:

此时是没有头部,在文中被移除!

<student>
    <score>80</score>
    <subject>math</subject>
    <name>Tom</name>
</student>

3. JSON转XML并输出成指定的文件

传入xml字符串,利用DOM4J工具即可输出到指定的文件

public static void writeXmlToFile(String xmlStr) throws Exception{
        //将xmlstr转为文件形式
        Document document = DocumentHelper.parseText(xmlStr);
        //设置输出的格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        //构建输出流
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("newXml.xml"), format);
        //不要转义字符
        xmlWriter.setEscapeText(false);
        //写入
        xmlWriter.write(document);
        //关闭流
        xmlWriter.close();
    }

4. 主要的pom.xml配置如下

如下的依赖就足够了

	<dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20171018</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>de.odysseus.staxon</groupId>
            <artifactId>staxon</artifactId>
            <version>1.3</version>
        </dependency>

5. 整体代码

public class Main {
    public static void main(String[] args)throws Exception {
        //将xml转化成json
        String jsonStr = xmlToJson();
        //将json转换成xml
        String xmlStr = jsonToXml(jsonStr);
        //将json按照响应格式写入score2.xml
        writeXmlToFile(xmlStr);

    }

    public static String xmlToJson() throws Exception{
        //使用DOM4j
        SAXReader saxReader = new SAXReader();
        //读取文件
        Document read = saxReader.read("G:\\IDEAProjects\\JavaStudy\\Mooc\\src\\main\\resources\\score.xml");
        //使用json的xml转json方法
        JSONObject jsonObject = XML.toJSONObject(read.asXML());
        //设置缩进转为字符串
        System.out.println(jsonObject.toString(3));
        return jsonObject.toString(3);
    }

    public static void writeXmlToFile(String xmlStr) throws Exception{
        //将xmlstr转为文件形式
        Document document = DocumentHelper.parseText(xmlStr);
        //设置输出的格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        //构建输出流
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("G:\\IDEAProjects\\JavaStudy\\Mooc\\src\\main\\resources\\score2.xml"), format);
        //不要转义字符
        xmlWriter.setEscapeText(false);
        //写入
        xmlWriter.write(document);
        //关闭流
        xmlWriter.close();
    }


    //json转换成xml
    public static String jsonToXml(String json){
        //输入流
        StringReader input = new StringReadewww.chinasem.cnr(json);
        //输出流
        StringWriter output = new StringWriter();
        //构建配置文件
        JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false).repairingNamespaces(false).build();
        try {
               China编程 //xml事件读
                //  This is the top level interface for parsing XML Events.  It provides
                //  the ability to peek at the next event and returns configuration
                //  information through the property interface.
                // 这是最解析XML事件最顶层的接口,它提供了查看下一个事件并通过属性界面返回配置信息的功能。
                XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(input);
                //这是编写XML文档的顶级界面。
                //验证XML的形式不需要此接口的实例。
                XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(output);
                //创建一个实例使用默认的缩进和换行
                writer = new PrettyXMLEventWriter(writer);
                //添加整个流到输出流,调用next方法,知道hasnext返回false
                writer.add(reader);
                reader.close();
                writer.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                    try {
                            output.close();
                            input.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                     }
            //移除头部标签
            if (output.toString().length() >= 38) {
                System.out.println(output.toString().substring(39));
                return output.toString().substring(39);
            }
        System.out.println(output);
        return output.toString();
    }
}

到此这篇关于Java实现XML与JSON的互相转换详解的文章就介绍到这了,更多相关Java XML与JSON互转内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Java实现XML与JSON的互相转换详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153845

相关文章

Java如何从Redis中批量读取数据

《Java如何从Redis中批量读取数据》:本文主要介绍Java如何从Redis中批量读取数据的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一.背景概述二.分析与实现三.发现问题与屡次改进3.1.QPS过高而且波动很大3.2.程序中断,抛异常3.3.内存消

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

Redis中的Lettuce使用详解

《Redis中的Lettuce使用详解》Lettuce是一个高级的、线程安全的Redis客户端,用于与Redis数据库交互,Lettuce是一个功能强大、使用方便的Redis客户端,适用于各种规模的J... 目录简介特点连接池连接池特点连接池管理连接池优势连接池配置参数监控常用监控工具通过JMX监控通过Pr

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)