Java实现xml和json互转
Java实现复杂数据结构(如嵌套对象、数组)在 JSON 与 XML 之间的相互转换,可以使用 Jackson 和 Jackson 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 字符串。
