最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1、簡述

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

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

2、什么是 JSONPath?

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

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

基本語法規(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 結(jié)合 POJO 使用

將查詢結(jié)果映射到 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("??查詢結(jié)果: " + result);

4.2 自定義函數(shù)

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

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

5、總結(jié)

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

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

相關(guān)文章

  • SpringBoot集成Redis流程詳解

    SpringBoot集成Redis流程詳解

    這篇文章主要介紹了SpringBoot集成Redis流程詳解,導入jar包,編寫配置類,編寫util類,配置yml這四個步驟,有詳細的代碼示例,,需要的朋友可以參考下
    2023-05-05
  • java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy

    java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy

    這篇文章主要為大家介紹了java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 使用JAVA命令運行JAR包以及日志輸出詳解

    使用JAVA命令運行JAR包以及日志輸出詳解

    這篇文章主要給大家介紹了關(guān)于使用JAVA命令運行JAR包以及日志輸出的相關(guān)資料,文中通過代碼示例介紹的非常詳細,對大家學習或者使用java具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Java 線程創(chuàng)建方式全過程

    Java 線程創(chuàng)建方式全過程

    本文介紹了繼承Thread類、實現(xiàn)Runnable接口和Callable接口創(chuàng)建線程的方法,以及線程池的使用理邏輯和任務(wù)處理機制,并重點講解了線程池參數(shù)配置、常用阻塞隊列和拒絕策略、線程池的優(yōu)勢和應(yīng)用場景、虛擬線程的特點和創(chuàng)建方法、ScheduledThreadPool線程池原理和使用方法
    2026-05-05
  • springboot配置templates直接訪問的實現(xiàn)

    springboot配置templates直接訪問的實現(xiàn)

    這篇文章主要介紹了springboot配置templates直接訪問的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 冒泡排序的原理及java代碼實現(xiàn)

    冒泡排序的原理及java代碼實現(xiàn)

    冒泡排序法:關(guān)鍵字較小的記錄好比氣泡逐趟上浮,關(guān)鍵字較大的記錄好比石塊下沉,每趟有一塊最大的石塊沉底。算法本質(zhì):(最大值是關(guān)鍵點,肯定放到最后了,如此循環(huán))每次都從第一位向后滾動比較,使最大值沉底,最小值上升一次,最后一位向前推進
    2016-02-02
  • JAVA反射機制實例教程

    JAVA反射機制實例教程

    這篇文章主要介紹了JAVA反射機制,包括了Java反射機制的各種應(yīng)用技巧,非常具有實用價值,需要的朋友可以參考下
    2014-09-09
  • 解決警告:No archetype found in remote catalog. Defaulting to internal catalog.問題

    解決警告:No archetype found in remote c

    新建Maven項目時,若提示遠程archetype未找到,可通過以下兩種方式解決:一是檢查網(wǎng)絡(luò)或倉庫配置;二是設(shè)置VMOptions參數(shù)-DarchetypeCatalog=internal,強制使用內(nèi)部目錄
    2025-08-08
  • 詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程

    詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程

    這篇文章主要介紹了詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Java實戰(zhàn)之超市收銀管理系統(tǒng)的實現(xiàn)

    Java實戰(zhàn)之超市收銀管理系統(tǒng)的實現(xiàn)

    這篇文章主要介紹了如何利用Java實現(xiàn)超市收銀管理系統(tǒng),文中采用的技術(shù)有:Spring、SpringMVC、MyBatis、ThymeLeaf等,需要的可以參考一下
    2022-03-03

最新評論

闽侯县| 万年县| 武强县| 静海县| 久治县| 海盐县| 景泰县| 灌阳县| 朔州市| 湄潭县| 岳普湖县| 旬阳县| 台山市| 新竹市| 收藏| 防城港市| 张家口市| 长泰县| 乐山市| 陆川县| 庐江县| 平阳县| 东辽县| 手游| 平南县| 普陀区| 石柱| 华池县| 南康市| 五台县| 昌吉市| 仙游县| 电白县| 合水县| 沭阳县| 荣昌县| 多伦县| 新平| 辽宁省| 垫江县| 台山市|