前言
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 字符串。
以上就是java实现json与xml相互转换的简明教程的详细内容,更多关于java json与xml互转的资料请关注代码网其它相关文章!
发表评论