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

相关文章

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

Java中Integer128陷阱

《Java中Integer128陷阱》本文主要介绍了Java中Integer与int的区别及装箱拆箱机制,重点指出-128至127范围内的Integer值会复用缓存对象,导致==比较结果为true,下... 目录一、Integer和int的联系1.1 Integer和int的区别1.2 Integer和in

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA