• 作者:老汪软件技巧
  • 发表时间: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"
    } ]
  } ]
}


上一条查看详情 +整理最近的生活
下一条 查看详情 +没有了