吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

jsonpath庫中的常規功能介紹

Linux愛好者 ? 來源:Python大數據分析 ? 作者: 費弗里 ? 2021-09-01 14:11 ? 次閱讀

1 簡介

在日常使用Python的過程中,我們經常會與json格式的數據打交道,尤其是那種嵌套結構復雜的json數據,從中抽取復雜結構下鍵值對數據的過程枯燥且費事。

而熟悉xpath的朋友都知道,對于xml格式類型的具有層次結構的數據,我們可以通過編寫xpath語句來靈活地提取出滿足某些結構規則的數據。

類似的,JSONPath也是用于從json數據中按照層次規則抽取數據的一種實用工具,在Python中我們可以使用jsonpath這個庫來實現JSONPath的功能。

2 在Python中使用JSONPath提取json數據jsonpath是一個第三方庫,所以我們首先需要通過pip install jsonpath對其進行安裝。

2.1 一個簡單的例子安裝完成后,我們首先來看一個簡單的例子,從而初探其使用方式:

這里使用到的示例json數據來自高德地圖步行導航接口,包含了從天安門廣場到西單大悅城的步行導航結果,原始數據如下,層次結構較深:

f2beeac2-0ad0-11ec-911a-12bb97331649.png

假如我想要獲取其嵌套結構中steps鍵值對下每段行程的耗時duration數據,配合jsonpath就可以這樣做:

import json

from jsonpath import jsonpath

# 讀入示例json數據with open(‘json示例.json’, encoding=‘utf-8’) as j:

demo_json = json.loads(j.read())

# 配合JSONPath表達式提取數據

jsonpath(demo_json, ‘$..steps[*].duration’)

f2cab01e-0ad0-11ec-911a-12bb97331649.png

其中$..steps[*].duration就是我們用于描述數據位置規則的JSONPath語句,配合jsonpath()便可以提取出對應信息,下面我們就來學習jsonpath中支持的常用JSONPath語法:

2.2 jsonpath中的常用JSONPath語法為了滿足日常提取數據的需求,JSONPath中設計了一系列語法規則來實現對目標值的定位,其中常用的有:

「按位置選擇節點」

在jsonpath中主要有以下幾種按位置選擇節點的方式:

功能語法

根節點$

當前節點@

子節點。或[]

任意子節點*

任意后代節點。。

讓我們來演示一下它們的一些用法:

# 提取所有duration鍵對應值

jsonpath(demo_json, ‘$..duration’)

f2eb80dc-0ad0-11ec-911a-12bb97331649.png

# 提取所有steps鍵的子節點對應instruction值

jsonpath(demo_json, ‘$..steps.*.instruction’)

f2f7c37e-0ad0-11ec-911a-12bb97331649.png

索引子節點」

有些時候我們需要在選擇過程中對子節點做多選或按位置選擇操作,就可以使用到jsonpath中的相關功能:

# 多選所有steps鍵的子節點對應的instruction與action值

jsonpath(demo_json, ‘$..steps.*[instruction,action]’)

f323adb8-0ad0-11ec-911a-12bb97331649.png

# 選擇steps鍵的第0個子節點對應的instruction與action值

jsonpath(demo_json, ‘$..steps[0][instruction,action]’)

# 選擇steps鍵的第1到3(不包括3)個子節點對應的instruction與action值

jsonpath(demo_json, ‘$..steps[1:3][instruction,action]’)

# 配合@,選擇steps鍵的最后一個子節點對應的instruction與action值

jsonpath(demo_json, ‘$..steps[(@.length-1)][instruction,action]’)

f3322294-0ad0-11ec-911a-12bb97331649.png

「條件篩選」

有些時候我們需要根據子節點的某些鍵值對值,對選擇的節點進行篩選,在jsonpath中支持常用的==、!=、》、《等比較運算符,以==比較符為例,這里配合@定位符從當前節點提取子節點,語法為?(@.鍵名 比較符 值):

# 找到所有steps子節點中orientation為“西”的

jsonpath(demo_json, ‘$..steps[?(@.orientation == “西”)]’)

f340b5e8-0ad0-11ec-911a-12bb97331649.png

而如果想要提取所有具有指定鍵的節點,可以參考下面的例子:

# 找到所有具有polyline鍵的節點對應的polyline與road鍵對應值

jsonpath(demo_json, ‘$.。[?(@.polyline)][polyline,road]’)

f3559148-0ad0-11ec-911a-12bb97331649.png

2.3 返回結果的形式在前面的例子中,我們所有的返回結果直接就是提取到的滿足條件的結果,而jsonpath()中還提供了另一種特殊的結果返回形式,只需要設置參數result_type=None就可以改直接返回結果為返回每個結果的JSONPath表達式:

# 獲取結果的JSONPath表達式

jsonpath(demo_json, ‘$.。[?(@.polyline)][polyline,road]’, result_type=None)

f3c909b6-0ad0-11ec-911a-12bb97331649.png

以上介紹的均為jsonpath庫中的常規功能,可以滿足基礎的json數據提取需求,而除了jsonpath之外,還有其他具有更加豐富拓展功能的JSONPath類的第三方庫,可以幫助我們實現很多進階靈活的操作。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7145

    瀏覽量

    89590
  • XML
    XML
    +關注

    關注

    0

    文章

    188

    瀏覽量

    33142
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85041
  • JSON
    +關注

    關注

    0

    文章

    119

    瀏覽量

    7011

原文標題:在 Python 中操縱 json 數據的最佳方式

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Oracle數據的多功能集成開發環境

    Oracle數據的多功能集成開發環境 快捷菜單的可視化對象編輯器 上下文感知的SQL代碼補全、智能格式化和重構 逐步執行的自動調試功能功能
    的頭像 發表于 01-14 13:52 ?116次閱讀
    Oracle數據<b class='flag-5'>庫</b>的多<b class='flag-5'>功能</b>集成開發環境

    云數據是哪種數據類型?

    云數據是一種部署在虛擬計算環境的數據,它融合了云計算的彈性和可擴展性,為用戶提供高效、靈活的數據服務。云數據主要分為兩大類:關系型
    的頭像 發表于 01-07 10:22 ?142次閱讀

    騰訊ima升級知識功能,上線小程序實現共享與便捷問答

    近日,騰訊旗下的AI智能工作臺ima.copilot(簡稱ima)迎來了知識功能的重大升級。此次升級不僅增加了“共享知識”的新能力,還正式上線了“ima知識”小程序,為用戶帶來了
    的頭像 發表于 12-31 15:32 ?450次閱讀

    Java 23功能介紹

    功能。 跟上 Java 新版本的發布節奏可能很難,這意味著要解決一連串的問題——更改是什么、為什么要更改以及如何使用全新和更新的功能。 在這篇博文中,我將介紹 Java 23 的一些全新和更新
    的頭像 發表于 12-04 10:02 ?360次閱讀
    Java 23<b class='flag-5'>功能</b><b class='flag-5'>介紹</b>

    HAL和標準的區別 HAL與CMSIS的關系

    在嵌入式系統開發,HAL(硬件抽象層)和標準是兩種常用的軟件,它們在功能和使用場景上有所不同。 1. 標準
    的頭像 發表于 12-02 14:02 ?1247次閱讀

    HAL在STM32開發的重要性

    HAL(Hardware Abstraction Layer Library,硬件抽象層)在STM32開發扮演著至關重要的角色。以下是HAL在STM32開發
    的頭像 發表于 12-02 13:35 ?556次閱讀

    HAL在嵌入式系統的應用

    HAL(Hardware Abstraction Layer Library,硬件抽象層)在嵌入式系統扮演著至關重要的角色。以下是HAL在嵌入式系統
    的頭像 發表于 12-02 11:32 ?897次閱讀

    支持外擴sd卡功能的串口數據模塊

    往期文章介紹了LS10串口數據模塊的SQL數據庫存取功能,片內容量測試如下: 容量測試,分享如下: 表格結構(sn int primary key not null,id int,p1 int
    發表于 11-23 09:50

    LS10串口數據模塊外擴SD卡功能

    LS10串口數據模塊外擴SD卡功能
    的頭像 發表于 11-23 09:42 ?256次閱讀
    LS10串口數據<b class='flag-5'>庫</b>模塊外擴SD卡<b class='flag-5'>功能</b>

    Python解析:通過實現代理請求與數據抓取

    在Python,有多個可以幫助你實現代理請求和數據抓取。這些提供了豐富的功能和靈活的API,使得你可以輕松地發送HTTP請求、處理響應、解析HTML/XML/JSON數據,以及進
    的頭像 發表于 10-24 07:54 ?231次閱讀

    軟件系統數據的分庫分表設計

    的分布式集群,實現分庫分表功能,解決數據中海量數據存儲和查詢性能的問題。MyCat 還是一個數據的集群中間件,主要實現 RDBMS 數據集群的故障轉移、負載均衡、讀寫分離等
    的頭像 發表于 08-22 11:39 ?368次閱讀
    軟件系統數據<b class='flag-5'>庫</b>的分庫分表設計

    電動機的常規控制方法

    電動機作為現代工業不可或缺的動力源,其性能的穩定性和控制的精確性直接關系到整個生產過程的效率和安全。因此,電動機的常規控制成為了工業自動化領域的重要研究方向。本文將從電動機的常規控制方法、控制策略、控制系統以及控制技術的發展趨
    的頭像 發表于 06-28 18:14 ?1613次閱讀

    利用NVIDIA的nvJPEG2000分析DICOM醫學影像的解碼功能

    本文將深入分析 DICOM 醫學影像的解碼功能。AWS HealthImaging 利用 NVIDIA 的 nvJPEG2000 來實現此功能
    的頭像 發表于 05-28 14:27 ?909次閱讀
    利用NVIDIA的nvJPEG2000<b class='flag-5'>庫</b>分析DICOM醫學影像的解碼<b class='flag-5'>功能</b>

    數字信號處理DSP文件的使用方法和功能實現

    本文首先介紹數字信號處理(DSP),是指將連續的模擬信號轉換為不連續、離散的數字信號并進行處理以提取所需的信號(信息)的過程。然后通過一個簡單的Lab來說明DSP文件的使用方法和功能實現。
    的頭像 發表于 04-03 14:09 ?2830次閱讀
    數字信號處理DSP<b class='flag-5'>庫</b>文件的使用方法和<b class='flag-5'>功能</b>實現

    納芯微帶保護功能的單通道隔離驅動NSI6611在電控系統的運用介紹

    主驅電控系統是新能源汽車的重要組成部分,本文將從電控系統的系統框圖出發,介紹系統的各組成部分及其功能,并重點介紹納芯微帶保護功能的單通道隔離驅動NSI6611在電控系統
    的頭像 發表于 03-18 09:51 ?3751次閱讀
    納芯微帶保護<b class='flag-5'>功能</b>的單通道隔離驅動NSI6611在電控系統<b class='flag-5'>中</b>的運用<b class='flag-5'>介紹</b>
    缅甸百家乐官网娱乐场开户注册 | 赌场少女| 大发888集团| 大发888 今日头条| 德州扑克怎么玩| 大连娱网棋牌步步为赢| 博彩网址大全| 盛世国际娱乐博彩| 根河市| 优博百家乐官网现金网平台| 百家乐官网全讯网娱乐城| 至尊百家乐官网2012| 百家乐官网英皇娱乐场| 互博百家乐官网的玩法技巧和规则| 百家乐好不好玩| 百家乐真人游戏娱乐网| 丽景湾百家乐的玩法技巧和规则 | 大发888游乐场| 网上娱乐城| 顶尖百家乐官网学习| 百家乐官网赌场软件| 三公百家乐官网在线哪里可以| 百家乐视频游戏客服| 状元百家乐的玩法技巧和规则 | 百家乐官网娱乐网官网网| 百利宫百家乐官网的玩法技巧和规则 | 博雅德州扑克| 百家乐官网投注注技巧| 24山入门| 怎么赢百家乐的玩法技巧和规则 | 网上百家乐官网内| 百家乐庄闲筹码| 百家乐有人玩吗| 大丰收娱乐城开户| 百家乐官网开户优惠多的平台是哪家| 皇冠百家乐官网的玩法技巧和规则 | 百家乐游戏机图片| 德州扑克单机游戏| 平台百家乐官网的区别| 乐九百家乐游戏| 大发888真钱游戏|