Java實現(xiàn)JSON與XML相互轉(zhuǎn)換的簡明教程
前言
Java實現(xiàn)復(fù)雜數(shù)據(jù)結(jié)構(gòu)(如嵌套對象、數(shù)組)在 JSON 與 XML 之間的相互轉(zhuǎn)換,可以使用 Jackson
和 Jackson XML
擴(kuò)展庫來完成。Jackson
是一個流行的 JSON 處理庫,支持將 Java 對象序列化為 JSON 字符串,并反序列化為 Java 對象。通過 Jackson 的 XML 擴(kuò)展庫,可以實現(xiàn) JSON 和 XML 之間的轉(zhuǎn)換。
引入依賴
<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>
實現(xiàn) XML 和 JSON 互轉(zhuǎn)
定義數(shù)據(jù)結(jié)構(gòu)
- 定義一個數(shù)據(jù)結(jié)構(gòu),包括嵌套對象和數(shù)組。例如,一個 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 互轉(zhuǎn)實現(xiàn)
- 使用 Jackson 提供的 ObjectMapper 和 XmlMapper 來進(jìn)行 JSON 和 XML 的轉(zhuǎn)換。
JSON 轉(zhuǎn) 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 { // 創(chuàng)建一個包含嵌套對象和數(shù)組的復(fù)雜結(jié)構(gòu)的示例 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 對象轉(zhuǎn)換為 JSON 字符串 ObjectMapper jsonMapper = new ObjectMapper(); String jsonString = jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(company); System.out.println("JSON Representation:"); System.out.println(jsonString); // 將 JSON 字符串轉(zhuǎn)換為 XML 字符串 XmlMapper xmlMapper = new XmlMapper(); String xmlString = xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(company); System.out.println("XML Representation:"); System.out.println(xmlString); } }
JSON 轉(zhuǎn) 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 轉(zhuǎn) 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 { // 假設(shè)已有 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 字符串轉(zhuǎn)換為 Java 對象 XmlMapper xmlMapper = new XmlMapper(); Company company = xmlMapper.readValue(xmlString, Company.class); // 將 Java 對象轉(zhuǎn)換為 JSON 字符串 ObjectMapper jsonMapper = new ObjectMapper(); String jsonString = jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(company); System.out.println("JSON Representation:"); System.out.println(jsonString); } }
XML 轉(zhuǎn) 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
: 這些類構(gòu)成了復(fù)雜的數(shù)據(jù)結(jié)構(gòu),其中包含嵌套對象和數(shù)組。通過注解 @JacksonXmlProperty 和 @JacksonXmlElementWrapper,我們可以控制 XML 中元素的表示方式。JsonToXmlConverter
: 該類展示了如何將復(fù)雜的 Java 對象序列化為 JSON 字符串,并使用 Jackson 的 XmlMapper 將其轉(zhuǎn)換為 XML 字符串。XmlToJsonConverter
: 該類展示了如何從 XML 字符串反序列化為 Java 對象,并轉(zhuǎn)換為 JSON 字符串。
以上就是Java實現(xiàn)JSON與XML相互轉(zhuǎn)換的簡明教程的詳細(xì)內(nèi)容,更多關(guān)于Java JSON與XML互轉(zhuǎn)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java實現(xiàn)在線預(yù)覽--poi實現(xiàn)word、excel、ppt轉(zhuǎn)html的方法
這篇文章主要介紹了java實現(xiàn)在線預(yù)覽--poi實現(xiàn)word、excel、ppt轉(zhuǎn)html的方法,本文需要引入poi的jar包給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-09-09Spring?Boot整合?NoSQL?數(shù)據(jù)庫?Redis詳解
這篇文章主要為大家介紹了Spring?Boot整合?NoSQL?數(shù)據(jù)庫?Redis詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09將Arthas整合到Java業(yè)務(wù)鏡像中的流程步驟
在現(xiàn)代Java應(yīng)用開發(fā)中,診斷和調(diào)試是一個不可或缺的環(huán)節(jié),Arthas,作為阿里巴巴開源的一款Java診斷工具,提供了一種在不修改代碼的情況下,實時監(jiān)控、診斷和調(diào)試Java應(yīng)用程序的解決方案,本文將詳細(xì)介紹Arthas的基本概念,并逐步指導(dǎo)如何將其整合到Java業(yè)務(wù)鏡像中2025-02-02SpringBoot前后端傳輸加密設(shè)計實現(xiàn)方案
這篇文章主要給大家介紹了關(guān)于SpringBoot前后端傳輸加密設(shè)計實現(xiàn)方案的相關(guān)資料,包括數(shù)據(jù)加密方案、解密傳輸數(shù)據(jù)實現(xiàn)方案和響應(yīng)數(shù)據(jù)加密實現(xiàn)方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-11-11SpringBoot調(diào)用對方webService接口的幾種方法示例
平常我們開發(fā)調(diào)用接口一般會用到幾種數(shù)據(jù)格式,比如有restful的,這個是目前最流行的,也是最簡單開發(fā)的,還有一種就是webservice數(shù)據(jù)格式,本文給大家介紹了幾種SpringBoot調(diào)用對方webService接口的方法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11