- 作者:老汪软件技巧
- 发表时间:2024-08-28 04:01
- 浏览量:
Java实现复杂数据结构(如嵌套对象、数组)在 JSON 与 XML 之间的相互转换,可以使用 Jackson 和 Jackson XML 扩展库来完成。Jackson 是一个流行的 JSON 处理库,支持将 Java 对象序列化为 JSON 字符串,并反序列化为 Java 对象。通过 Jackson 的 XML 扩展库,可以实现 JSON 和 XML 之间的转换。
引入依赖
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.15.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.15.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformatgroupId>
<artifactId>jackson-dataformat-xmlartifactId>
<version>2.15.0version>
dependency>
dependencies>
实现 XML 和 JSON 互转定义数据结构
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 employees;
public Department() { }
public Department(String name, List 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 getEmployees() {
return employees;
}
public void setEmployees(List employees) {
this.employees = employees;
}
}
// 公司类
public class Company {
private String name;
private List departments;
public Company() { }
public Company(String name, List 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 getDepartments() {
return departments;
}
public void setDepartments(List departments) {
this.departments = departments;
}
}
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 CorpName>
<Departments>
<Department>
<Name>ITName>
<Employees>
<Employee>
<Name>AliceName>
<Age>30Age>
<Role>DeveloperRole>
Employee>
<Employee>
<Name>BobName>
<Age>28Age>
<Role>DesignerRole>
Employee>
Employees>
Department>
<Department>
<Name>HRName>
<Employees>
<Employee>
<Name>CharlieName>
<Age>32Age>
<Role>ManagerRole>
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 = "\n" +
" Tech Corp \n" +
" \n" +
" \n" +
" IT \n" +
" \n" +
" \n" +
" Alice \n" +
" 30 \n" +
" Developer \n" +
" \n" +
" \n" +
" Bob \n" +
" 28 \n" +
" Designer \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" HR \n" +
" \n" +
" \n" +
" Charlie \n" +
" 32 \n" +
" Manager \n" +
" \n" +
" \n" +
" \n" +
" \n" +
"";
// 将 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"
} ]
} ]
}