使用 JsonPath Java 實現數據路徑提取

一、JsonPath 簡介

JsonPath 是一種基於 JavaScript 對象表示法 (JSON) 的語言,可用於從 JSON 文檔中選擇、過濾和操作數據字段。它提供了一種簡單和易於使用的語法,可輕鬆地使用像 Java 這樣的編程語言進行解析和讀取 JSON 數據。JsonPath 的語法基於 XPath 和正則表達式。

JsonPath 能夠輕鬆解析 JSON 數據,特別是在需要高效讀取大量數據或在實時大數據分析時。使用 JsonPath 可以查詢和過濾 JSON 數據,獲取所需的信息,實現快速的數據提取和分析。

二、JsonPath 用法示例

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

public class JsonPathExample {
   public static void main(String[] args) {
      String json = "{ \"name\": \"John\", \"age\": 30, \"city\": \"New York\" }";
      
      String name = JsonPath.read(json, "$.name");
      int age = JsonPath.read(json, "$.age");
      
      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
   }
}

上述示例中,我們使用了 JsonPath 庫中的 read 方法來讀取 JSON 數據中的字段。在上述示例中,我們使用了類似 XPath 的語法檢索 JSON 對象中的數據。

三、使用 JsonPath Java 實現數據路徑提取示例

使用 JsonPath Java 實現數據路徑提取需要按照以下步驟:

1. 導入 JsonPath 依賴庫,例如使用 Maven:

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

2. 讀取 JSON 數據,並使用 JsonPath 對其進行解析:

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

public class JsonPathExample {
   public static void main(String[] args) {
      String json = "{ \"person\": { \"name\": \"John\", \"age\": 30, \"city\": \"New York\", \"address\": { \"zip-code\": 10001, \"state\": \"NY\"} } }";
      
      String name = JsonPath.read(json, "$.person.name");
      int age = JsonPath.read(json, "$.person.age");
      String city = JsonPath.read(json, "$.person.city");
      int zipCode = JsonPath.read(json, "$.person.address.zip-code");
      String state = JsonPath.read(json, "$.person.address.state");
      
      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
      System.out.println("City: " + city);
      System.out.println("Zip code: " + zipCode);
      System.out.println("State: " + state);
   }
}

上述示例中,我們首先讀取 JSON 數據,然後使用 JsonPath 庫中的 read 方法解析 JSON 數據並提取數據。通過此方法,我們得到了 JSON 對象中的多個字段。

四、JsonPath 過濾和查詢數據示例

JsonPath 查詢支持多種查詢表達式,例如 $、*、..、@、[] 和 () 等。以下是一些示例:

1. 查詢數組元素:

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

public class JsonPathExample {
   public static void main(String[] args) {
      String json = "{ \"fruits\": [\"apple\", \"banana\", \"orange\"] }";
      
      Configuration conf = Configuration.defaultConfiguration();
      DocumentContext dc = JsonPath.using(conf).parse(json);
      
      List<String> fruitsList = dc.read("$.fruits");
      
      System.out.println("Fruits: " + fruitsList.toString());
   }
}

上述示例中,我們使用 $ 符號查詢 fruits 數組,並使用 JsonPath 庫中的 read 方法讀取該數組的所有元素。

2. 過濾元素:

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

public class JsonPathExample {
   public static void main(String[] args) {
      String json = "{ \"fruits\": [\"apple\", \"banana\", \"orange\"] }";
      
      Configuration conf = Configuration.defaultConfiguration();
      DocumentContext dc = JsonPath.using(conf).parse(json);
      
      List<String> fruitsList = dc.read("$.fruits[?(@ == 'banana' || @ == 'orange')]");
      
      System.out.println("Fruits: " + fruitsList.toString());
   }
}

上述示例中,我們使用 [?(expression)] 過濾 fruits 數組中的元素。在該示例中,我們僅提取值為 ‘banana’ 或 ‘orange’ 的元素。

3. 嵌套過濾和查詢:

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

public class JsonPathExample {
   public static void main(String[] args) {
      String json = "{ \"store\": { \"book\": [ { \"category\": \"reference\", \"author\": \"Nigel Rees\", \"title\": \"Sayings of the Century\", \"price\": 8.95 }, { \"category\": \"fiction\", \"author\": \"Evelyn Waugh\", \"title\": \"Sword of Honour\", \"price\": 12.99 } ] } }";
      
      Configuration conf = Configuration.defaultConfiguration();
      DocumentContext dc = JsonPath.using(conf).parse(json);
      
      String author = dc.read("$.store.book[?(@.price < 10)].author");
      
      System.out.println("Author Name: " + author);
   }
}

上述示例中,我們嵌套使用了查詢和過濾操作。首先,我們使用 $ 符號從 store 對象開始查詢 book 數組,接着,我們使用 [?(expression)] 格式過濾 book 數組中 price 小於 10 的元素,最後,我們使用 .author 獲取獲取符合條件的元素的作者姓名。

五、 JsonPath 在實際項目中的應用場景

JsonPath 可用於在大量數據中快速提取特定值。特別地,它在以下情況下非常有用:

1. 從大數據集中快速提取一組值。

2. 以編程方式解析大型數據文檔中大量嵌套的字段。

3. 快速了解 JSON 對象中的數據結構和內容。

4. 在全文搜索與過濾的應用程序中,它對 JSON 數據的快速查詢和過濾也非常有用。

六、小結

本文詳細介紹了 JsonPath 的基本語法和用法,同時講述了 JsonPath 在實際項目中的應用場景。使用 JsonPath 可以輕鬆地解析和讀取 JSON 數據,能夠快速提取數據,以及方便的過濾和查詢數據。如果在大量數據的場景下,使用 JsonPath 可以更快地完成數據處理任務。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/312919.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-06 15:17
下一篇 2025-01-06 15:17

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29

發表回復

登錄後才能評論