欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java利用JSONPath操作JSON數(shù)據(jù)的技術指南

 更新時間:2025年04月01日 08:50:00   作者:拾荒的小海螺  
JSONPath?是一種強大的工具,用于查詢和操作?JSON?數(shù)據(jù),類似于?SQL?的語法,它為處理復雜的?JSON?數(shù)據(jù)結構提供了簡單且高效的解決方案,本文將介紹?JSONPath?的基本語法,并通過詳細的?Java?示例展示其實際應用,需要的朋友可以參考下

1、簡述

JSONPath 是一種強大的工具,用于查詢和操作 JSON 數(shù)據(jù)。類似于 SQL 的語法,它為處理復雜的 JSON 數(shù)據(jù)結構提供了簡單且高效的解決方案。

本文將介紹 JSONPath 的基本語法,并通過詳細的 Java 示例展示其實際應用。

2、什么是 JSONPath?

JSONPath 是一種用于 JSON 文檔的路徑表達式語言,類似于 XPath(用于 XML)。它允許我們:

  • 提取 JSON 中的值
  • 過濾和操作數(shù)據(jù)
  • 遍歷嵌套結構

基本語法規(guī)則:

JSONPath 表達式功能說明
$根對象
. 或 []訪問子元素
*通配符,匹配所有元素
..遞歸搜索
?()過濾表達式
@當前元素

在使用 JSONPath 之前,需要添加其依賴。以下是 JSONPath 的 Maven 依賴:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.8.0</version>
</dependency>

3、Java 示例

在 Java 中,我們可以使用開源庫 Jayway JSONPath 來實現(xiàn) JSONPath 的功能。以下示例 JSON 數(shù)據(jù):

{
  "store": {
    "book": [
      { "category": "fiction", "author": "John", "price": 10.99 },
      { "category": "science", "author": "Jane", "price": 12.99 },
      { "category": "fiction", "author": "George", "price": 8.99 }
    ],
    "bicycle": {
      "color": "red",
      "price": 99.99
    }
  }
}

3.1 基本查詢

從 JSON 中獲取所有書籍的類別。

import com.jayway.jsonpath.JsonPath;
import java.util.List;

public class JSONPathDemo {
    public static void main(String[] args) {
        String json = """
        {
          "store": {
            "book": [
              { "category": "fiction", "author": "John", "price": 10.99 },
              { "category": "science", "author": "Jane", "price": 12.99 },
              { "category": "fiction", "author": "George", "price": 8.99 }
            ]
          }
        }
        """;

        List<String> categories = JsonPath.read(json, "$.store.book[*].category");
        System.out.println("??書籍類別: " + categories);
    }
}

輸出:

書籍類別: [fiction, science, fiction]

3.2 過濾查詢

獲取價格大于 10 的書籍。

List<Map<String, Object>> expensiveBooks = JsonPath.read(json, "$.store.book[?(@.price > 10)]");
System.out.println("??價格大于 10 的書籍: " + expensiveBooks);

輸出:

價格大于 10 的書籍: [{category=fiction, author=John, price=10.99}, {category=science, author=Jane, price=12.99}]

3.3 遞歸搜索

獲取所有價格字段。

List<Double> prices = JsonPath.read(json, "$.store..price");
System.out.println("??所有價格: " + prices);

輸出:

所有價格: [10.99, 12.99, 8.99, 99.99]

3.4 嵌套查詢

獲取自行車的顏色。

String color = JsonPath.read(json, "$.store.bicycle.color");
System.out.println("??自行車顏色: " + color);

輸出:

自行車顏色: red

3.5 結合 POJO 使用

將查詢結果映射到 Java 對象中。

import com.fasterxml.jackson.databind.ObjectMapper;

class Book {
    private String category;
    private String author;
    private double price;

    // Getters and Setters
}

List<Book> books = JsonPath.parse(json).read("$.store.book[*]", new TypeRef<List<Book>>() {});
books.forEach(book -> System.out.println("??書籍: " + book.getCategory() + " by " + book.getAuthor()));

4、高級用法

4.1 動態(tài)路徑

根據(jù)用戶輸入動態(tài)生成 JSONPath 表達式。

String category = "fiction";
String jsonPath = String.format("$.store.book[?(@.category == '%s')]", category);
List<Map<String, Object>> result = JsonPath.read(json, jsonPath);
System.out.println("??查詢結果: " + result);

4.2 自定義函數(shù)

通過擴展 JSONPath 的功能,實現(xiàn)復雜邏輯。

Configuration conf = Configuration.builder()
        .options(Option.DEFAULT_PATH_LEAF_TO_NULL)
        .functions(new CustomFunctions())
        .build();
DocumentContext context = JsonPath.using(conf).parse(json);

5、總結

JSONPath 是處理 JSON 數(shù)據(jù)的利器,其直觀的語法和強大的功能使得 JSON 數(shù)據(jù)操作變得輕松自如。通過結合 Java 和第三方庫,可以在各種場景下高效應用 JSONPath。

以上就是Java利用JSONPath操作JSON數(shù)據(jù)的技術指南的詳細內(nèi)容,更多關于Java JSONPath操作JSON數(shù)據(jù)的資料請關注腳本之家其它相關文章!

相關文章

  • java基礎學習JVM中GC的算法

    java基礎學習JVM中GC的算法

    這篇文章主要介紹了java基礎學習JVM中GC的算法,通過圖文加深對GC算法思路的理解。
    2017-11-11
  • 使用BufferedReader讀取本地文件的操作

    使用BufferedReader讀取本地文件的操作

    這篇文章主要介紹了使用BufferedReader讀取本地文件的操作,具有很好的參考價值,希望對大家有所幫助。
    2021-07-07
  • java入門概念個人理解之package與import淺析

    java入門概念個人理解之package與import淺析

    下面小編就為大家?guī)硪黄猨ava入門概念個人理解之package與import淺析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • SpringSecurity退出功能實現(xiàn)的正確方式(推薦)

    SpringSecurity退出功能實現(xiàn)的正確方式(推薦)

    本文將介紹在Spring Security框架下如何實現(xiàn)用戶的"退出"logout的功能。本文通過實例代碼講解的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-11-11
  • 聊聊Java Double相加出現(xiàn)的怪事

    聊聊Java Double相加出現(xiàn)的怪事

    這篇文章主要介紹了Java Double相加出現(xiàn)的怪事,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 初識Java一些常見的數(shù)據(jù)類型

    初識Java一些常見的數(shù)據(jù)類型

    這篇文章主要介紹Java一些常見的數(shù)據(jù)類型,Java是一種優(yōu)秀的程序設計語言,它具有令人賞心悅目的語法和易于理解的語義,下面文章小編就來簡單介紹為什么說Java是最好的語言并且介紹它的各種常見類型,需要的朋友可以參考一下
    2021-10-10
  • SpringBoot3-yaml文件配置方式

    SpringBoot3-yaml文件配置方式

    這篇文章主要介紹了SpringBoot3-yaml文件配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java序列化問題:“Serialized class has not implement Serializable interface”錯誤的解決方法

    Java序列化問題:“Serialized class has not impl

    在Java開發(fā)中,序列化(Serialization)是一個常見的操作,尤其是在分布式系統(tǒng)、網(wǎng)絡通信或數(shù)據(jù)持久化場景中,然而,序列化過程中可能會遇到各種問題,其中最常見的一個錯誤是Serialized class has not implement Serializable interface,本文給大家介紹了相關的解決方法
    2025-02-02
  • SpringBoot SSE服務端主動推送事件的實現(xiàn)

    SpringBoot SSE服務端主動推送事件的實現(xiàn)

    本文主要介紹了SpringBoot SSE服務端主動推送事件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • springboot使用JdbcTemplate完成對數(shù)據(jù)庫的增刪改查功能

    springboot使用JdbcTemplate完成對數(shù)據(jù)庫的增刪改查功能

    這篇文章主要介紹了springboot使用JdbcTemplate完成對數(shù)據(jù)庫的增刪改查功能,需要的朋友可以參考下
    2017-12-12

最新評論