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

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

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

1、簡(jiǎn)述

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

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

2、什么是 JSONPath?

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

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

基本語(yǔ)法規(guī)則:

JSONPath 表達(dá)式功能說(shuō)明
$根對(duì)象
. 或 []訪問(wèn)子元素
*通配符,匹配所有元素
..遞歸搜索
?()過(guò)濾表達(dá)式
@當(dāng)前元素

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

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

3、Java 示例

在 Java 中,我們可以使用開(kāi)源庫(kù) Jayway JSONPath 來(lái)實(shí)現(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 過(guò)濾查詢

獲取價(jià)格大于 10 的書籍。

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

輸出:

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

3.3 遞歸搜索

獲取所有價(jià)格字段。

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

輸出:

所有價(jià)格: [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 對(duì)象中。

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、高級(jí)用法

4.1 動(dòng)態(tài)路徑

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

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ù)

通過(guò)擴(kuò)展 JSONPath 的功能,實(shí)現(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ù)的利器,其直觀的語(yǔ)法和強(qiáng)大的功能使得 JSON 數(shù)據(jù)操作變得輕松自如。通過(guò)結(jié)合 Java 和第三方庫(kù),可以在各種場(chǎng)景下高效應(yīng)用 JSONPath。

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

相關(guān)文章

  • SpringBoot集成Redis流程詳解

    SpringBoot集成Redis流程詳解

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

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

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

    使用JAVA命令運(yùn)行JAR包以及日志輸出詳解

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

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

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

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

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

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

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

    JAVA反射機(jī)制實(shí)例教程

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

    解決警告:No archetype found in remote c

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

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

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

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

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

最新評(píng)論

台北县| 高雄市| 杭锦旗| 桦南县| 七台河市| 启东市| 鄄城县| 巴林左旗| 铅山县| 闵行区| 高邮市| 云和县| 合作市| 茶陵县| 大兴区| 鹿邑县| 陵水| 宣武区| 永和县| 四会市| 寻甸| 汶川县| 平顶山市| 黄大仙区| 衡阳市| 和田县| 蒲江县| 通海县| 兴海县| 巴彦淖尔市| 武威市| 怀来县| 吴忠市| 蓬溪县| 湘阴县| 乌兰察布市| 新源县| 霍林郭勒市| 永兴县| 东至县| 海伦市|