前言
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互转的资料请关注代码网其它相关文章!
发表评论