首页 > 编程语言 >Java 解析 XML 转换为 Json

Java 解析 XML 转换为 Json

时间:2024-10-23 21:32:02浏览次数:4  
标签:XML xml Java json private Json import com

我们使用 Java 开发项目时偶尔会需要使用到 Xml 文件的解析, 一般情况下都会使用 DOM4j、SAX、JDOM 等方案,但这些方案比较代码编写较为繁琐。我们经常使用的 Json 进行数据传输或存储,如果能够将 Xml 快速转换为 Json,将会大大减轻我们后续开发和维护的工作量。

本篇博客简单介绍使用 net.sf.json-lib 的 json-lib 快速将 Xml 内容转换为 Json 字符串,以及使用 fastjson 将 Json 字符串转换为自定义的实体类对象,大大简化代码的编写量,在博客的最后会提供源代码的下载。


一、搭建工程

新建一个名称为 springboot_xmltojson 的工程,结构如下图:

image

resources 目录下的 employ.xml 是需要解析的 Xml 样例文件

entity 是按照 Xml 文件转换后的 Json 字段,创建的一些实体类,主要用来将 Json 字符串转换为实体类对象

XmlToJsonTest 类中编写了两个测试方法,展示了读取 xml 文件内容转换为 Json 字符串,以及将 Json 字符串转换为自定义的实体类对象。

下面看一下 pom 文件内容,主要引入了 xom、json-lib、fastjson 这 3 个依赖包:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jobs</groupId>
    <artifactId>springboot_xmltojson</artifactId>
    <version>1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <scope>compile</scope>
        </dependency>
        <!--引入 xom 依赖包-->
        <dependency>
            <groupId>xom</groupId>
            <artifactId>xom</artifactId>
            <version>1.3.9</version>
        </dependency>
        <!--引入 json-lib 依赖包-->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
        </dependency>
        <!--引入 fastjson 依赖包 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.53</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
</project>

二、代码细节

employ.xml 文件内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<company>
    <cname>xxx公司</cname>
    <leader>xxx领导</leader>
    <department>
        <dname>销售部</dname>
        <employee>
            <id>1</id>
            <name>任肥肥</name>
            <age>37</age>
            <salary>3600</salary>
        </employee>
        <employee>
            <id>2</id>
            <name>李墩墩</name>
            <age>24</age>
            <salary>4600</salary>
        </employee>
    </department>
    <department>
        <dname>研发部</dname>
        <employee>
            <id>4</id>
            <name>侯胖胖</name>
            <age>40</age>
            <salary>3800</salary>
        </employee>
        <employee>
            <id>5</id>
            <name>蔺赞赞</name>
            <age>35</age>
            <salary>5000</salary>
        </employee>
        <employee>
            <id>6</id>
            <name>乔豆豆</name>
            <age>41</age>
            <salary>4500</salary>
        </employee>
    </department>
</company>

Company 的实体类代码如下:

package com.jobs.entity;

import lombok.Data;
import java.util.List;

@Data
public class Company {

    private String cname;

    private String leader;

    private List<Department> department;
}

Department 的实体类代码如下:

package com.jobs.entity;

import lombok.Data;
import java.util.List;

@Data
public class Department {

    private String dname;

    private List<Employee> employee;
}

Employee 的实体类如下:

package com.jobs.entity;

import lombok.Data;

@Data
public class Employee {

    private Integer id;

    private String name;

    private Integer age;

    private Integer salary;
}

XmlToJsonTest 测试类的代码如下:

package com.jobs;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.jobs.entity.Company;
import net.sf.json.xml.XMLSerializer;
import org.apache.commons.lang.StringUtils;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.Resource;

import java.io.BufferedReader;
import java.io.FileReader;

@SpringBootTest
public class XmlToJsonTest {

    //从当前项目中的 resources 目录下寻找 test.nc 文件
    @Value("classpath:employ.xml")
    private Resource resource;

    //读取 xml 文件转 json
    @Test
    public void test1() throws Exception {
        //读取 xml 文件的内容
        StringBuilder sb = new StringBuilder();
        try (BufferedReader br = new BufferedReader(new FileReader(resource.getFile()))) {
            String line = br.readLine();
            while (StringUtils.isNotBlank(line)) {
                sb.append(line);
                line = br.readLine();
            }
        }

        XMLSerializer xmlSerializer = new XMLSerializer();
        net.sf.json.JSON read = xmlSerializer.read(sb.toString());
        String jsonString = read.toString();
        System.out.println(jsonString);
    }

    //读取 xml 文件转 json,再将 json 转换为实体内对象
    @Test
    public void test2() throws Exception {
        //读取 xml 文件的内容
        StringBuilder sb = new StringBuilder();
        try (BufferedReader br = new BufferedReader(new FileReader(resource.getFile()))) {
            String line = br.readLine();
            while (StringUtils.isNotBlank(line)) {
                sb.append(line);
                line = br.readLine();
            }
        }

        XMLSerializer xmlSerializer = new XMLSerializer();
        net.sf.json.JSON read = xmlSerializer.read(sb.toString());
        String jsonString = read.toString();

        //将 json 字符串,转换为自定义的实体类对象
        Company company = JSON.parseObject(jsonString, new TypeReference<Company>() {
        });

        System.out.println(company);
    }
}

最后列出 employee.xml 解析后转换的 Json 字符串内容:

{
  "cname": "xxx公司",
  "leader": "xxx领导",
  "department": [
    {
      "dname": "销售部",
      "employee": [
        {
          "id": "1",
          "name": "任肥肥",
          "age": "37",
          "salary": "3600"
        },
        {
          "id": "2",
          "name": "李墩墩",
          "age": "24",
          "salary": "4600"
        }
      ]
    },
    {
      "dname": "研发部",
      "employee": [
        {
          "id": "4",
          "name": "侯胖胖",
          "age": "40",
          "salary": "3800"
        },
        {
          "id": "5",
          "name": "蔺赞赞",
          "age": "35",
          "salary": "5000"
        },
        {
          "id": "6",
          "name": "乔豆豆",
          "age": "41",
          "salary": "4500"
        }
      ]
    }
  ]
}

本篇博客的源代码下载地址为:https://files.cnblogs.com/files/blogs/699532/springboot_xmltojson.zip

标签:XML,xml,Java,json,private,Json,import,com
From: https://www.cnblogs.com/studyjobs/p/18498424

相关文章

  • springboot+vue展位设计模型库网站的java开发与设计
    目录系统实现截图详细技术介绍本课题软硬件环境核心代码部分展示其他springboot项目推荐详细视频演示源码获取系统实现截图详细技术介绍系统采用了基于SpringBoot、Vue和MySQL的三层结构体系。前端部分通过Vue框架构建用户界面,实现页面展示和交互功能,后端则利......
  • JAVA开源项目 基于Vue和SpringBoot购物商城网站
    本文项目编号T032,文末自助获取源码\color{red}{T032,文末自助获取源码}......
  • JAVA开源项目 基于Vue和SpringBoot高校心理教育辅导系统
    本文项目编号T031,文末自助获取源码\color{red}{T031,文末自助获取源码}......
  • 聊一聊Spring中的AOP【XML】【标签解析】
    [!NOTE]**Spring版本:**5.3.27**AspectJ版本:**1.9.22**JDK版本:**1.81、前置说明[!TIP]概念性的东西理解起来都会比较抽象,下面的一些概念可以一扫而过,有个大致印象就行。先学会使用,再分析原理,回过头来再看这些概念就会一一对应上。1.1前置概念1.1.1基础概念AOP(......
  • Java Spring的常用注解详解和案例示范
    1.Spring常用注解概述1.1@Component@Component是Spring的基础注解之一,它用于将类标记为Spring容器中的一个组件。通过@Component注解,Spring会自动将该类注册为一个Bean,供依赖注入使用。使用示例:@ComponentpublicclassUserService{publicvoidperf......
  • Java程序启动“Hello, World!”详细分析
    在Java编程世界中,“Hello,World!”程序是学习旅程的起点。这个程序虽然简单,但它展示了Java程序的基本结构和从编写到运行的全过程。下面,我们将详细分析如何启动一个Java程序并输出“Hello,World!”。一.编写Java源代码首先,我们需要编写一个包含main方法的Java类。main......
  • vue3+java基于Spring Boot的爱老助老服务平台源码 lw 部署
    目录功能介绍具体实现截图技术介绍开发核心技术介绍:技术创新点vue3和vue2的区别:核心代码部分展示非功能需求分析系统开发流程软件测试源码获取功能介绍爱老助老服务平台的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使......
  • javascript对象介绍
    1.什么是对象?在JavaScript中,对象是一个无序的键值对集合,可以用来存储数据和功能。对象可以包含原始值、函数(方法)以及其他对象,是构建复杂数据结构和实现面向对象编程的基础。2.创建对象2.1字面量方式最常见的创建对象的方法是使用对象字面量:constperson={n......
  • java基础2024(5.集合)
    集合(Collection)是一组用于存储和操作对象的数据结构。Java集合框架(JavaCollectionsFramework,JCF)提供了一个统一的架构,用于表示和操作集合,它包含了一系列接口、实现类以及算法。Collection接口Collection接口是集合框架的根接口,它扩展了Iterable接口,定义了所有集合类型共......
  • javascript数组splice和slice介绍
    一splice1.概述splice是JavaScript数组对象的一个方法,用于改变原数组的内容。它可以添加、删除或替换数组中的元素。2.语法array.splice(start,deleteCount,item1,item2,...)start:需要改变的数组的起始索引。如果是负数,则表示从数组末尾开始计数。de......