Java解析XML和JSON的重要方法

 更新时间:2025年11月14日 09:18:17   作者:座山雕~  
这篇文章主要为大家详细介绍了Java解析XML和JSON的几种重要方法,文中的示例代码讲解详细,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

1.XML的三种解析

DOM解析:将xml文件全部加载到内存中,对内存开销较大,支持随意的访问,增删改查,解析速度慢。

SAX解析:基于事件驱动,逐行读取xml,不占用内存,速度比较快,无法随机访问,不能修改。

StAX解析:位于这两者之间,基于拉取模式,支持xml写入,支持选择性解析。

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

        // 1. 创建SAXReader对象
        // 注意:DOM4J 的 SAXReader 不是纯 SAX 解析,而是 SAX + DOM 混合模式。
        // 它底层用 SAX 高效读取 XML,但最终构建 DOM4J 的 Document 对象,支持 XPath 查询。
        SAXReader reader = new SAXReader();
        InputStream is = Test02.class.getClassLoader().getResourceAsStream("test.xml");
        //获取文件 xml
        Document readfile = reader.read(is);
        String sle = "//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. 创建SAXReader对象
            // 注意:DOM4J 的 SAXReader 不是纯 SAX 解析,而是 SAX + DOM 混合模式。
            // 它底层用 SAX 高效读取 XML,但最终构建 DOM4J 的 Document 对象,支持 XPath 查询。
            SAXReader reader = new SAXReader();
            
            // 2. 加载XML文件
            File file = new File("books.xml");
            Document document = reader.read(file);
            
            System.out.println("=== 所有书籍标题 ===");
            // 3. 使用XPath选择所有title元素
            List<Node> titleNodes = document.selectNodes("//book/title");
            for (Node node : titleNodes) {
                System.out.println(node.getText());
            }
            
            System.out.println("\n=== 价格超过35的书籍 ===");
            // 4. 使用XPath选择价格>35的书籍
            List<Node> expensiveBooks = document.selectNodes("//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("//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. 获取单个节点
            Node firstBook = document.selectSingleNode("//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);

就两行代码,两个方法:

创建:ObjectMapper 对象 ,调用下面两个方法即可。

1.将对象转换为 JSON格式:writeValueAsString(对象)

2.将JSON转换为java对象:readValue(json字符,类的信息)

(常用)Gson

        Gson gson = new Gson();
        Student user = gson.fromJson(jsonString, Student.class); // JSON转对象
        System.out.println(user);
        String json = gson.toJson(user); // 对象转JSON
        System.out.println(json);

也是两行代码:

创建gson对象

1.使用fromJson:将json转换为对象

2.使用toJson:将对象转换为json

到此这篇关于Java解析XML和JSON的重要方法的文章就介绍到这了,更多相关Java解析XML和JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现FIFO功能的完整代码实践

    Java实现FIFO功能的完整代码实践

    在软件开发中,队列(Queue)是一种常见的数据结构,其特点是先进先出(FIFO,First In First Out),FIFO 队列在生产者-消费者模型、任务调度、缓冲区管理等场景中具有广泛的应用,本文给大家介绍了Java实现FIFO功能的完整代码实践,需要的朋友可以参考下
    2025-03-03
  • 浅谈Java父子类加载顺序

    浅谈Java父子类加载顺序

    本文主要介绍了Java父子类加载顺序,那么这么长怎么记呀?本文就帮大家总结一下,更有利于记忆,感兴趣的可以了解一下
    2021-08-08
  • java实现的RC4加密解密算法示例

    java实现的RC4加密解密算法示例

    这篇文章主要介绍了java实现的RC4加密解密算法,结合具体实例形式分析了java RC4加密解密算法的实现与使用技巧,需要的朋友可以参考下
    2017-06-06
  • springboot使用dynamic做多数据源配置全过程

    springboot使用dynamic做多数据源配置全过程

    文章介绍了如何使用dynamic依赖实现多数据源配置,并解决多数据源失效问题,通过配置yml文件、使用@DS注解指定数据源以及合理使用事务传播机制,成功解决了项目中的多数据源问题
    2025-12-12
  • 利用Spring JPA中的@Version注解实现乐观锁

    利用Spring JPA中的@Version注解实现乐观锁

    乐观锁是数据库和应用程序中使用的一种并发控制策略,用于在多个事务尝试更新单个记录时确保数据完整性,Java Persistence API (JPA) 提供了一种借助@Version注解在 Java 应用程序中实现乐观锁的机制,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-11-11
  • 详解Java使用JDBC连接MySQL数据库

    详解Java使用JDBC连接MySQL数据库

    本文详细讲解了Java使用JDBC连接MySQL数据库的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • ThreadLocal 在上下文传值场景实践源码

    ThreadLocal 在上下文传值场景实践源码

    这篇文章主要为大家介绍了ThreadLocal在上下文传值场景下的实践源码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • Java编写实现登陆窗口

    Java编写实现登陆窗口

    这篇文章主要为大家详细介绍了Java编写实现登陆窗口,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • springboot整合mybatis将sql打印到日志的实例详解

    springboot整合mybatis将sql打印到日志的实例详解

    这篇文章主要介绍了springboot整合mybatis将sql打印到日志的实例详解,需要的朋友可以参考下
    2017-12-12
  • SpringBoot详解Banner的使用

    SpringBoot详解Banner的使用

    这篇文章主要介绍了超个性修改SpringBoot项目的启动banner的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论