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

Python JSONPath進(jìn)階實(shí)戰(zhàn)之高效查詢技巧全解析

 更新時間:2025年08月04日 10:01:23   作者:hui函數(shù)  
JSONPath 是一種用于在 JSON 文檔中定位和提取數(shù)據(jù)的查詢語言,類似于 XPath 在 XML 中的作用,下面小編就來和大家詳細(xì)講講JSONPath高效查詢技巧

一、JSONPath 簡介

JSONPath 是一種用于在 JSON 文檔中定位和提取數(shù)據(jù)的查詢語言,類似于 XPath 在 XML 中的作用

核心功能

  • 導(dǎo)航 JSON 數(shù)據(jù)結(jié)構(gòu)
  • 提取特定節(jié)點(diǎn)或值
  • 過濾符合條件的元素
  • 支持復(fù)雜條件查詢

二、基礎(chǔ)語法詳解

1. 根元素與子節(jié)點(diǎn)

語法說明示例結(jié)果解釋
$根對象$整個 JSON 文檔
.子節(jié)點(diǎn)訪問$.storestore 對象
[]子節(jié)點(diǎn)訪問(替代)$['store']store 對象

2. 通配符與多選

語法說明示例結(jié)果解釋
*匹配所有元素$.*根下的所有直接子節(jié)點(diǎn)
.*對象的所有屬性$.store.*store 的所有直接子節(jié)點(diǎn)
[a,b]選擇多個指定鍵$['a','b']返回 a 和 b 的值

三、數(shù)組操作深度解析

1. 索引與切片

// 示例數(shù)據(jù)
[10, 20, 30, 40, 50]
表達(dá)式結(jié)果說明
$[0]10第一個元素(索引從0開始)
$[-1]50最后一個元素
$[1:3][20, 30]切片(左閉右開)
$[2:][30,40,50]從索引2到結(jié)束
$[:3][10,20,30]從開始到索引3(不包括索引3)
$[0,2,4][10,30,50]選擇多個指定索引

2. 遞歸下降操作符

// 示例數(shù)據(jù)
{
  "a": {"x": 1},
  "b": [{"x": 2}, {"y": 3}],
  "x": 4
}
表達(dá)式結(jié)果說明
$..x[1, 2, 4]所有層級的 x 屬性
$..*所有值遞歸返回所有節(jié)點(diǎn)值
$..[0][{"x":2}]所有數(shù)組的第一個元素

四、高級查詢技術(shù)

1. 過濾表達(dá)式

// 示例數(shù)據(jù):商品列表
[
  {"id": 1, "name": "Laptop", "price": 1200, "stock": 5},
  {"id": 2, "name": "Mouse", "price": 25, "stock": 0},
  {"id": 3, "name": "Keyboard", "price": 80, "stock": 10}
]
表達(dá)式結(jié)果說明
$[?(@.price < 100)][Mouse, Keyboard]價格低于100的商品
$[?(@.stock > 0)][Laptop, Keyboard]有庫存的商品
$[?(@.name == 'Laptop')][Laptop]名稱為Laptop的商品
$[?(@.name =~ /^M.*/i)][Mouse]名稱以M開頭的商品

2. 復(fù)雜條件組合

表達(dá)式結(jié)果說明
$[?(@.price >= 50 && @.price <= 100)][Keyboard]價格在50-100之間的商品
$[?(@.stock == 0 || @.price > 1000)][Laptop, Mouse]無庫存或價格高于1000的商品
$[?(!@.stock)][Mouse]沒有stock屬性的商品

五、函數(shù)擴(kuò)展(實(shí)現(xiàn)相關(guān))

1. 常用函數(shù)

函數(shù)說明示例結(jié)果
length()數(shù)組/字符串長度$[?(@.tags.length()>1)]標(biāo)簽>1的項
min()最小值$.prices.min()最低價格
max()最大值$.prices.max()最高價格
avg()平均值$.prices.avg()平均價格

2. 類型檢查

表達(dá)式說明
$[?(@.price typeof 'number')]價格是數(shù)字類型的項
$[?(@.name typeof 'string')]名稱是字符串類型的項

六、綜合實(shí)戰(zhàn)示例

示例數(shù)據(jù)

{
  "company": "TechCorp",
  "departments": [
    {
      "name": "Dev",
      "employees": [
        {"id": 101, "name": "Alice", "salary": 8000, "skills": ["Java", "Python"]},
        {"id": 102, "name": "Bob", "salary": 7500, "skills": ["JavaScript"]}
      ]
    },
    {
      "name": "QA",
      "employees": [
        {"id": 201, "name": "Charlie", "salary": 7000, "skills": ["Testing", "Automation"]},
        {"id": 202, "name": "Diana", "salary": 8500}
      ]
    }
  ]
}

查詢示例

1.獲取所有員工對象:

$..employees[*]

2.查找工資超過7800的員工:

$..employees[?(@.salary > 7800)]
// 結(jié)果:[{"id":101,...}, {"id":202,...}]

3.獲取Dev部門員工的姓名:

$.departments[?(@.name == 'Dev')].employees[*].name
// 結(jié)果:["Alice", "Bob"]

4.查找掌握J(rèn)ava技能的員工:

注意:Python 的 jsonpath 庫對 contains 的支持可能有限

方法1:使用 jsonpath-ng 庫(功能更強(qiáng)大)

# 先安裝:pip install jsonpath-ng
from jsonpath_ng import parse
?
# 更可靠的查詢
expr = parse("$..employees[?(@.skills contains 'Java')]")
matches = [match.value for match in expr.find(json_dict)]

方法2:使用in關(guān)鍵字

res = jsonpath.jsonpath(json_dict,"$..employees[?('Java' in @.skills)]")

方法3:使用正則表達(dá)式匹配

# 使用正則表達(dá)式匹配
res = jsonpath.jsonpath(json_dict, "$..employees[?(@.skills =~ /.*Java.*/i)]")

5.統(tǒng)計QA部門員工數(shù):

方法1:使用 jsonpath-ng 庫(功能更強(qiáng)大,支持length()方法)

$.departments[?(@.name == 'QA')].employees.length()
// 結(jié)果:2

方法2:使用jsonpath庫(不支持length()方法),使用python的len()函數(shù)

res = jsonpath.jsonpath(json_dict,"$.departments[?(@.name == 'QA')].employees.*")
print(len(res))

6.獲取所有技能列表(去重):

$..skills[*]
// 結(jié)果:["Java", "Python", "JavaScript", "Testing", "Automation"]

七、注意事項與最佳實(shí)踐

1.大小寫敏感

$.Store  // 錯誤(應(yīng)為小寫s)
$.store  // 正確

2.特殊字符處理

$['special-key']  // 包含連字符的鍵
$['@attribute']   // 以@開頭的鍵

3.性能優(yōu)化

  • 避免過度使用遞歸 ..
  • 盡量使用具體路徑而非通配符
  • 先過濾后處理

4.實(shí)現(xiàn)差異

  • 不同語言的庫支持程度不同
  • 函數(shù)擴(kuò)展非標(biāo)準(zhǔn)實(shí)現(xiàn)
  • 空值處理方式可能不同

到此這篇關(guān)于Python JSONPath進(jìn)階實(shí)戰(zhàn)之高效查詢技巧全解析的文章就介紹到這了,更多相關(guān)Python JSONPath內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)獲取漢字偏旁部首的方法示例【測試可用】

    Python實(shí)現(xiàn)獲取漢字偏旁部首的方法示例【測試可用】

    這篇文章主要介紹了Python實(shí)現(xiàn)獲取漢字偏旁部首的方法,涉及Python基于第三方模塊進(jìn)行漢字處理的相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • python 通過文件夾導(dǎo)入包的操作

    python 通過文件夾導(dǎo)入包的操作

    這篇文章主要介紹了python 通過文件夾導(dǎo)入包的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python函數(shù)中4種參數(shù)的使用教程

    Python函數(shù)中4種參數(shù)的使用教程

    這篇文章主要介紹了Python函數(shù)中4種參數(shù)的使用包括必需的參數(shù),關(guān)鍵字參數(shù),缺省參數(shù),不定長參數(shù)的相關(guān)介紹,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • python二分法查找函數(shù)底值

    python二分法查找函數(shù)底值

    大家好,本篇文章主要講的是python二分法查找函數(shù)底值,感興趣的同學(xué)趕快來看一看吧,對你有用的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 10 行Python 代碼實(shí)現(xiàn) AI 目標(biāo)檢測技術(shù)【推薦】

    10 行Python 代碼實(shí)現(xiàn) AI 目標(biāo)檢測技術(shù)【推薦】

    這篇文章主要介紹了10 行Python 代碼,實(shí)現(xiàn) AI 目標(biāo)檢測技術(shù),看完了代碼,我們在一起聊聊目標(biāo)檢測背后的技術(shù)背景,并解讀這10行Python代碼的由來和實(shí)現(xiàn)原理。感興趣的朋友跟隨小編一起看看吧
    2019-06-06
  • Python代碼需要縮進(jìn)嗎

    Python代碼需要縮進(jìn)嗎

    在本篇文章里小編給大家整理了關(guān)于Python代碼是否需要縮進(jìn)的相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-07-07
  • 解決python遞歸函數(shù)及遞歸次數(shù)受到限制的問題

    解決python遞歸函數(shù)及遞歸次數(shù)受到限制的問題

    這篇文章主要介紹了解決python遞歸函數(shù)及遞歸次數(shù)受到限制的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Python使用SQLAlchemy模塊實(shí)現(xiàn)操作數(shù)據(jù)庫

    Python使用SQLAlchemy模塊實(shí)現(xiàn)操作數(shù)據(jù)庫

    SQLAlchemy 是用Python編程語言開發(fā)的一個開源項目,它提供了SQL工具包和ORM對象關(guān)系映射工具,使用SQLAlchemy可以實(shí)現(xiàn)高效和高性能的數(shù)據(jù)庫訪問,下面我們就來學(xué)習(xí)一下SQLAlchemy模塊的具體應(yīng)用吧
    2023-11-11
  • python BeautifulSoup使用方法詳解

    python BeautifulSoup使用方法詳解

    Beautiful Soup 是用Python寫的一個HTML/XML的解析器,它可以很好的處理不規(guī)范標(biāo)記并生成剖析樹(parse tree)。 它提供簡單又常用的導(dǎo)航(navigating),搜索以及修改剖析樹的操作。它可以大大節(jié)省你的編程時間,下面我們就看看他是如何使用
    2013-11-11
  • 在pycharm中實(shí)現(xiàn)刪除bookmark

    在pycharm中實(shí)現(xiàn)刪除bookmark

    今天小編就為大家分享一篇在pycharm中實(shí)現(xiàn)刪除bookmark,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論