当前位置: 首页 > news >正文

Java实现xml和json互转

Java实现复杂数据结构(如嵌套对象、数组)在 JSON 与 XML 之间的相互转换,可以使用 JacksonJackson XML 扩展库来完成。Jackson 是一个流行的 JSON 处理库,支持将 Java 对象序列化为 JSON 字符串,并反序列化为 Java 对象。通过 Jackson 的 XML 扩展库,可以实现 JSON 和 XML 之间的转换。

引入依赖

<dependencies><!-- Jackson Core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.15.0</version></dependency><!-- Jackson Databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version></dependency><!-- Jackson Dataformat XML --><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.15.0</version></dependency>
</dependencies>

实现 XML 和 JSON 互转

定义数据结构

  • 定义一个数据结构,包括嵌套对象和数组。例如,一个 Company 对象,其中包含多个 Department 对象,每个 Department 对象又包含多个 Employee 对象
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;import java.util.List;// 员工类
public class Employee {private String name;private int age;private String role;public Employee() { }public Employee(String name, int age, String role) {this.name = name;this.age = age;this.role = role;}// Getters and Setters@JacksonXmlProperty(localName = "Name")public String getName() {return name;}public void setName(String name) {this.name = name;}@JacksonXmlProperty(localName = "Age")public int getAge() {return age;}public void setAge(int age) {this.age = age;}@JacksonXmlProperty(localName = "Role")public String getRole() {return role;}public void setRole(String role) {this.role = role;}
}// 部门类
public class Department {private String name;private List<Employee> employees;public Department() { }public Department(String name, List<Employee> employees) {this.name = name;this.employees = employees;}// Getters and Setters@JacksonXmlProperty(localName = "Name")public String getName() {return name;}public void setName(String name) {this.name = name;}@JacksonXmlElementWrapper(localName = "Employees")@JacksonXmlProperty(localName = "Employee")public List<Employee> getEmployees() {return employees;}public void setEmployees(List<Employee> employees) {this.employees = employees;}
}// 公司类
public class Company {private String name;private List<Department> departments;public Company() { }public Company(String name, List<Department> departments) {this.name = name;this.departments = departments;}// Getters and Setters@JacksonXmlProperty(localName = "Name")public String getName() {return name;}public void setName(String name) {this.name = name;}@JacksonXmlElementWrapper(localName = "Departments")@JacksonXmlProperty(localName = "Department")public List<Department> getDepartments() {return departments;}public void setDepartments(List<Department> departments) {this.departments = departments;}
}

JSON 与 XML 互转实现

  • 使用 Jackson 提供的 ObjectMapper 和 XmlMapper 来进行 JSON 和 XML 的转换。

JSON 转 XML

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;import java.io.IOException;
import java.util.Arrays;public class JsonToXmlConverter {public static void main(String[] args) throws IOException {// 创建一个包含嵌套对象和数组的复杂结构的示例Employee emp1 = new Employee("Alice", 30, "Developer");Employee emp2 = new Employee("Bob", 28, "Designer");Department dept1 = new Department("IT", Arrays.asList(emp1, emp2));Employee emp3 = new Employee("Charlie", 32, "Manager");Department dept2 = new Department("HR", Arrays.asList(emp3));Company company = new Company("Tech Corp", Arrays.asList(dept1, dept2));// 将 Java 对象转换为 JSON 字符串ObjectMapper jsonMapper = new ObjectMapper();String jsonString = jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(company);System.out.println("JSON Representation:");System.out.println(jsonString);// 将 JSON 字符串转换为 XML 字符串XmlMapper xmlMapper = new XmlMapper();String xmlString = xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(company);System.out.println("XML Representation:");System.out.println(xmlString);}
}

JSON 转 XML输出

<Company><Name>Tech Corp</Name><Departments><Department><Name>IT</Name><Employees><Employee><Name>Alice</Name><Age>30</Age><Role>Developer</Role></Employee><Employee><Name>Bob</Name><Age>28</Age><Role>Designer</Role></Employee></Employees></Department><Department><Name>HR</Name><Employees><Employee><Name>Charlie</Name><Age>32</Age><Role>Manager</Role></Employee></Employees></Department></Departments>
</Company>

XML 转 JSON

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;import java.io.IOException;public class XmlToJsonConverter {public static void main(String[] args) throws IOException {// 假设已有 XML 字符串String xmlString = "<Company>\n" +"  <Name>Tech Corp</Name>\n" +"  <Departments>\n" +"    <Department>\n" +"      <Name>IT</Name>\n" +"      <Employees>\n" +"        <Employee>\n" +"          <Name>Alice</Name>\n" +"          <Age>30</Age>\n" +"          <Role>Developer</Role>\n" +"        </Employee>\n" +"        <Employee>\n" +"          <Name>Bob</Name>\n" +"          <Age>28</Age>\n" +"          <Role>Designer</Role>\n" +"        </Employee>\n" +"      </Employees>\n" +"    </Department>\n" +"    <Department>\n" +"      <Name>HR</Name>\n" +"      <Employees>\n" +"        <Employee>\n" +"          <Name>Charlie</Name>\n" +"          <Age>32</Age>\n" +"          <Role>Manager</Role>\n" +"        </Employee>\n" +"      </Employees>\n" +"    </Department>\n" +"  </Departments>\n" +"</Company>";// 将 XML 字符串转换为 Java 对象XmlMapper xmlMapper = new XmlMapper();Company company = xmlMapper.readValue(xmlString, Company.class);// 将 Java 对象转换为 JSON 字符串ObjectMapper jsonMapper = new ObjectMapper();String jsonString = jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(company);System.out.println("JSON Representation:");System.out.println(jsonString);}
}

XML 转 JSON 输出

{"name" : "Tech Corp","departments" : [ {"name" : "IT","employees" : [ {"name" : "Alice","age" : 30,"role" : "Developer"}, {"name" : "Bob","age" : 28,"role" : "Designer"} ]}, {"name" : "HR","employees" : [ {"name" : "Charlie","age" : 32,"role" : "Manager"} ]} ]
}
  • Employee, Department, Company: 这些类构成了复杂的数据结构,其中包含嵌套对象和数组。通过注解 @JacksonXmlProperty 和 @JacksonXmlElementWrapper,我们可以控制 XML 中元素的表示方式。

  • JsonToXmlConverter: 该类展示了如何将复杂的 Java 对象序列化为 JSON 字符串,并使用 Jackson 的 XmlMapper 将其转换为 XML 字符串。

  • XmlToJsonConverter: 该类展示了如何从 XML 字符串反序列化为 Java 对象,并转换为 JSON 字符串。


http://www.mrgr.cn/news/8727.html

相关文章:

  • colmap的几种相机类型和内外参取得方法
  • k8s Unable to fetch container log stats failed to get fsstats for
  • linux之ELK
  • .NET_WebForm_layui控件使用及与webform联合使用
  • 数据分析及应用:如何分析区间上用户分布情况 | 基于快递单量区间划分的用户分布情况 | 基于TOPN商品区间划分用户浏览情况分析
  • LRU缓存
  • http的keepalive和tcp的keepalive
  • Spring面试题二
  • 【数据结构3】哈希表、哈希表的应用(集合与字典、md5算法和文件的哈希值)
  • 图像分割论文阅读:BCU-Net: Bridging ConvNeXt and U-Net for medical image segmentation
  • 用excel内容批量建立文件夹
  • 全面解析轮换IP:原理、优势与应用详解
  • 同一台主机两个github账号切换使用
  • Zookeeper的watch机制是如何工作的?
  • flink+flinkcdc+同步(MYSQL到MYSQL)实践
  • AudioNotes -将音频内容转 markdown
  • redis | 认识非关系型数据库Redis的列表类型及python如何操作redis
  • SpringBoot集成kafka-指定topic(主题)-partition(分区)-offset(偏移量)消费信息
  • 如何利用ThinkPHP6打造高效SEO优化的网站!
  • R 语言学习教程,从入门到精通,R XML 文件使用(19)