当前位置: 代码网 > it编程>编程语言>Java > Java实现JSON与XML相互转换的简明教程

Java实现JSON与XML相互转换的简明教程

2024年08月26日 Java 我要评论
前言java实现复杂数据结构(如嵌套对象、数组)在 json 与 xml 之间的相互转换,可以使用 jackson 和 jackson xml 扩展库来完成。jackson 是一个流行的 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 字符串。

以上就是java实现json与xml相互转换的简明教程的详细内容,更多关于java json与xml互转的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com