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

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

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

1、簡(jiǎn)述

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

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

2、什么是 JSONPath?

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

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

基本語法規(guī)則:

JSONPath 表達(dá)式功能說明
$根對(duì)象
. 或 []訪問子元素
*通配符,匹配所有元素
..遞歸搜索
?()過濾表達(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ù) Jayway JSONPath 來實(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 過濾查詢

獲取價(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ù)

通過擴(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ù)的利器,其直觀的語法和強(qiáng)大的功能使得 JSON 數(shù)據(jù)操作變得輕松自如。通過結(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)文章

  • java基礎(chǔ)學(xué)習(xí)JVM中GC的算法

    java基礎(chǔ)學(xué)習(xí)JVM中GC的算法

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

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

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

    java入門概念個(gè)人理解之package與import淺析

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

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

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

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

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

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

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

    SpringBoot3-yaml文件配置方式

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

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

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

    SpringBoot SSE服務(wù)端主動(dòng)推送事件的實(shí)現(xiàn)

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

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

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

最新評(píng)論