Java解析XML和JSON的重要方法
1.XML的三種解析
DOM解析:將xml文件全部加載到內(nèi)存中,對內(nèi)存開銷較大,支持隨意的訪問,增刪改查,解析速度慢。
SAX解析:基于事件驅(qū)動,逐行讀取xml,不占用內(nèi)存,速度比較快,無法隨機訪問,不能修改。
StAX解析:位于這兩者之間,基于拉取模式,支持xml寫入,支持選擇性解析。

2.DOM + XPath 解析 (重點掌握)

// 1. 創(chuàng)建SAXReader對象
// 注意:DOM4J 的 SAXReader 不是純 SAX 解析,而是 SAX + DOM 混合模式。
// 它底層用 SAX 高效讀取 XML,但最終構(gòu)建 DOM4J 的 Document 對象,支持 XPath 查詢。
SAXReader reader = new SAXReader();
InputStream is = Test02.class.getClassLoader().getResourceAsStream("test.xml");
//獲取文件 xml
Document readfile = reader.read(is);
String sle = "http://book/title"; // //book/title
List<Node> list = readfile.selectNodes(sle);
for (Node A:list){
System.out.println(A);
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class Dom4jXpathExample {
public static void main(String[] args) {
try {
// 1. 創(chuàng)建SAXReader對象
// 注意:DOM4J 的 SAXReader 不是純 SAX 解析,而是 SAX + DOM 混合模式。
// 它底層用 SAX 高效讀取 XML,但最終構(gòu)建 DOM4J 的 Document 對象,支持 XPath 查詢。
SAXReader reader = new SAXReader();
// 2. 加載XML文件
File file = new File("books.xml");
Document document = reader.read(file);
System.out.println("=== 所有書籍標(biāo)題 ===");
// 3. 使用XPath選擇所有title元素
List<Node> titleNodes = document.selectNodes("http://book/title");
for (Node node : titleNodes) {
System.out.println(node.getText());
}
System.out.println("\n=== 價格超過35的書籍 ===");
// 4. 使用XPath選擇價格>35的書籍
List<Node> expensiveBooks = document.selectNodes("http://book[price>35]");
for (Node book : expensiveBooks) {
String title = book.selectSingleNode("title").getText();
String price = book.selectSingleNode("price").getText();
System.out.println(title + " - 價格: " + price);
}
System.out.println("\n=== WEB類別的書籍 ===");
// 5. 使用屬性選擇
List<Node> webBooks = document.selectNodes("http://book[@category='WEB']");
for (Node book : webBooks) {
String title = book.selectSingleNode("title").getText();
String author = book.selectSingleNode("author").getText();
System.out.println(title + " - 作者: " + author);
}
// 6. 獲取單個節(jié)點
Node firstBook = document.selectSingleNode("http://book[1]");
System.out.println("\n第一本書的類別: " + firstBook.valueOf("@category"));
} catch (DocumentException e) {
e.printStackTrace();
}
}
}3.java解析JSON常用的庫:
(常用) Jackson
String jsonString = """
{
"name" : "Bob",
"age" : 25
}
""";
ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue(jsonString, Student.class);
System.out.println(student);
String s = mapper.writeValueAsString(student);
System.out.println(s);
就兩行代碼,兩個方法:
創(chuàng)建:ObjectMapper 對象 ,調(diào)用下面兩個方法即可。
1.將對象轉(zhuǎn)換為 JSON格式:writeValueAsString(對象)
2.將JSON轉(zhuǎn)換為java對象:readValue(json字符,類的信息)
(常用)Gson
Gson gson = new Gson();
Student user = gson.fromJson(jsonString, Student.class); // JSON轉(zhuǎn)對象
System.out.println(user);
String json = gson.toJson(user); // 對象轉(zhuǎn)JSON
System.out.println(json);
也是兩行代碼:
創(chuàng)建gson對象
1.使用fromJson:將json轉(zhuǎn)換為對象
2.使用toJson:將對象轉(zhuǎn)換為json
到此這篇關(guān)于Java解析XML和JSON的重要方法的文章就介紹到這了,更多相關(guān)Java解析XML和JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot使用dynamic做多數(shù)據(jù)源配置全過程
文章介紹了如何使用dynamic依賴實現(xiàn)多數(shù)據(jù)源配置,并解決多數(shù)據(jù)源失效問題,通過配置yml文件、使用@DS注解指定數(shù)據(jù)源以及合理使用事務(wù)傳播機制,成功解決了項目中的多數(shù)據(jù)源問題2025-12-12
利用Spring JPA中的@Version注解實現(xiàn)樂觀鎖
樂觀鎖是數(shù)據(jù)庫和應(yīng)用程序中使用的一種并發(fā)控制策略,用于在多個事務(wù)嘗試更新單個記錄時確保數(shù)據(jù)完整性,Java Persistence API (JPA) 提供了一種借助@Version注解在 Java 應(yīng)用程序中實現(xiàn)樂觀鎖的機制,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11
詳解Java使用JDBC連接MySQL數(shù)據(jù)庫
本文詳細(xì)講解了Java使用JDBC連接MySQL數(shù)據(jù)庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
springboot整合mybatis將sql打印到日志的實例詳解
這篇文章主要介紹了springboot整合mybatis將sql打印到日志的實例詳解,需要的朋友可以參考下2017-12-12

