99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

jsonpath庫(kù)中的常規(guī)功能介紹

Linux愛(ài)好者 ? 來(lái)源:Python大數(shù)據(jù)分析 ? 作者: 費(fèi)弗里 ? 2021-09-01 14:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 簡(jiǎn)介

在日常使用Python的過(guò)程中,我們經(jīng)常會(huì)與json格式的數(shù)據(jù)打交道,尤其是那種嵌套結(jié)構(gòu)復(fù)雜的json數(shù)據(jù),從中抽取復(fù)雜結(jié)構(gòu)下鍵值對(duì)數(shù)據(jù)的過(guò)程枯燥且費(fèi)事。

而熟悉xpath的朋友都知道,對(duì)于xml格式類(lèi)型的具有層次結(jié)構(gòu)的數(shù)據(jù),我們可以通過(guò)編寫(xiě)xpath語(yǔ)句來(lái)靈活地提取出滿(mǎn)足某些結(jié)構(gòu)規(guī)則的數(shù)據(jù)。

類(lèi)似的,JSONPath也是用于從json數(shù)據(jù)中按照層次規(guī)則抽取數(shù)據(jù)的一種實(shí)用工具,在Python中我們可以使用jsonpath這個(gè)庫(kù)來(lái)實(shí)現(xiàn)JSONPath的功能。

2 在Python中使用JSONPath提取json數(shù)據(jù)jsonpath是一個(gè)第三方庫(kù),所以我們首先需要通過(guò)pip install jsonpath對(duì)其進(jìn)行安裝。

2.1 一個(gè)簡(jiǎn)單的例子安裝完成后,我們首先來(lái)看一個(gè)簡(jiǎn)單的例子,從而初探其使用方式:

這里使用到的示例json數(shù)據(jù)來(lái)自高德地圖步行導(dǎo)航接口,包含了從天安門(mén)廣場(chǎng)到西單大悅城的步行導(dǎo)航結(jié)果,原始數(shù)據(jù)如下,層次結(jié)構(gòu)較深:

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

假如我想要獲取其嵌套結(jié)構(gòu)中steps鍵值對(duì)下每段行程的耗時(shí)duration數(shù)據(jù),配合jsonpath就可以這樣做:

import json

from jsonpath import jsonpath

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

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

# 配合JSONPath表達(dá)式提取數(shù)據(jù)

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

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

其中$..steps[*].duration就是我們用于描述數(shù)據(jù)位置規(guī)則的JSONPath語(yǔ)句,配合jsonpath()便可以提取出對(duì)應(yīng)信息,下面我們就來(lái)學(xué)習(xí)jsonpath中支持的常用JSONPath語(yǔ)法:

2.2 jsonpath中的常用JSONPath語(yǔ)法為了滿(mǎn)足日常提取數(shù)據(jù)的需求,JSONPath中設(shè)計(jì)了一系列語(yǔ)法規(guī)則來(lái)實(shí)現(xiàn)對(duì)目標(biāo)值的定位,其中常用的有:

「按位置選擇節(jié)點(diǎn)」

在jsonpath中主要有以下幾種按位置選擇節(jié)點(diǎn)的方式:

功能語(yǔ)法

根節(jié)點(diǎn)$

當(dāng)前節(jié)點(diǎn)@

子節(jié)點(diǎn)?;颍郏?/p>

任意子節(jié)點(diǎn)*

任意后代節(jié)點(diǎn)。。

讓我們來(lái)演示一下它們的一些用法:

# 提取所有duration鍵對(duì)應(yīng)值

jsonpath(demo_json, ‘$..duration’)

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

# 提取所有steps鍵的子節(jié)點(diǎn)對(duì)應(yīng)instruction值

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

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

索引子節(jié)點(diǎn)」

有些時(shí)候我們需要在選擇過(guò)程中對(duì)子節(jié)點(diǎn)做多選或按位置選擇操作,就可以使用到j(luò)sonpath中的相關(guān)功能:

# 多選所有steps鍵的子節(jié)點(diǎn)對(duì)應(yīng)的instruction與action值

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

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

# 選擇steps鍵的第0個(gè)子節(jié)點(diǎn)對(duì)應(yīng)的instruction與action值

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

# 選擇steps鍵的第1到3(不包括3)個(gè)子節(jié)點(diǎn)對(duì)應(yīng)的instruction與action值

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

# 配合@,選擇steps鍵的最后一個(gè)子節(jié)點(diǎn)對(duì)應(yīng)的instruction與action值

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

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

「條件篩選」

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

# 找到所有steps子節(jié)點(diǎn)中orientation為“西”的

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

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

而如果想要提取所有具有指定鍵的節(jié)點(diǎn),可以參考下面的例子:

# 找到所有具有polyline鍵的節(jié)點(diǎn)對(duì)應(yīng)的polyline與road鍵對(duì)應(yīng)值

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

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

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

# 獲取結(jié)果的JSONPath表達(dá)式

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

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

以上介紹的均為jsonpath庫(kù)中的常規(guī)功能,可以滿(mǎn)足基礎(chǔ)的json數(shù)據(jù)提取需求,而除了jsonpath之外,還有其他具有更加豐富拓展功能的JSONPath類(lèi)的第三方庫(kù),可以幫助我們實(shí)現(xiàn)很多進(jìn)階靈活的操作。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7256

    瀏覽量

    91926
  • XML
    XML
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    33759
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86811
  • JSON
    +關(guān)注

    關(guān)注

    0

    文章

    122

    瀏覽量

    7401

原文標(biāo)題:在 Python 中操縱 json 數(shù)據(jù)的最佳方式

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CANoeADAS功能介紹

    高級(jí)駕駛輔助系統(tǒng)(ADAS)在汽車(chē)的應(yīng)用日益增長(zhǎng),為了滿(mǎn)足工程師對(duì)于ADAS的分析、仿真和測(cè)試等功能的需求,CANoe從15.0版本開(kāi)始提供ADASFeatureSet(ADAS功能集,簡(jiǎn)稱(chēng)AFS
    的頭像 發(fā)表于 07-10 14:55 ?518次閱讀
    CANoe<b class='flag-5'>中</b>ADAS<b class='flag-5'>功能</b>集<b class='flag-5'>介紹</b>

    MySQL數(shù)據(jù)庫(kù)采集網(wǎng)關(guān)是什么?有什么功能?

    MySQL數(shù)據(jù)庫(kù)采集網(wǎng)關(guān)是一種用于連接、采集、處理并傳輸數(shù)據(jù)到MySQL數(shù)據(jù)庫(kù)的中間設(shè)備或軟件系統(tǒng),通常部署在數(shù)據(jù)源與MySQL數(shù)據(jù)庫(kù)之間,作為數(shù)據(jù)交互的橋梁。它在工業(yè)物聯(lián)網(wǎng)、智能樓宇、能源管理等
    的頭像 發(fā)表于 05-26 15:20 ?194次閱讀

    在IEEE802.1CB(FRER)CB_EN(DPI) 或FRMREPEN(常規(guī)參數(shù)表)配置哪一個(gè)?

    配置 FRMREPEN 不出現(xiàn)在該表的常規(guī)參數(shù)表CB_EN我是否需要啟用 CB_EN?? 我是否需要啟用 Deep Inspection Table 是否CB_EN我是否需要啟用此功能? 我找不到 FRMREPEN 那么我該如
    發(fā)表于 03-20 07:55

    微型導(dǎo)軌與常規(guī)直線(xiàn)導(dǎo)軌有哪些區(qū)別和用途?

    、低載荷的精密機(jī)械設(shè)備,比如數(shù)控加工機(jī)床、精密測(cè)量?jī)x器等;而常規(guī)直線(xiàn)導(dǎo)軌通常用于工業(yè)機(jī)器人、雷達(dá)、光學(xué)器件等高精度設(shè)備。
    發(fā)表于 03-05 16:25

    在D4100_usb.dll動(dòng)態(tài)庫(kù)應(yīng)該使用哪些相關(guān)的函數(shù)才能實(shí)現(xiàn)Activex的MemToFrameBuffer(),LoadToDMD() 功能?

    使用Activex時(shí)可以正常讀取圖片并顯示。但當(dāng)使用D4100_usb.dll動(dòng)態(tài)庫(kù)時(shí),不清楚怎樣才能將數(shù)據(jù)顯示到DMD。 請(qǐng)問(wèn)在D4100_usb.dll動(dòng)態(tài)庫(kù)應(yīng)該使用哪些相關(guān)的函數(shù)才能實(shí)現(xiàn)
    發(fā)表于 02-28 06:17

    Oracle數(shù)據(jù)庫(kù)的多功能集成開(kāi)發(fā)環(huán)境

    Oracle數(shù)據(jù)庫(kù)的多功能集成開(kāi)發(fā)環(huán)境 快捷菜單的可視化對(duì)象編輯器 上下文感知的SQL代碼補(bǔ)全、智能格式化和重構(gòu) 逐步執(zhí)行的自動(dòng)調(diào)試功能功能
    的頭像 發(fā)表于 01-14 13:52 ?400次閱讀
    Oracle數(shù)據(jù)<b class='flag-5'>庫(kù)</b>的多<b class='flag-5'>功能</b>集成開(kāi)發(fā)環(huán)境

    云數(shù)據(jù)庫(kù)是哪種數(shù)據(jù)庫(kù)類(lèi)型?

    云數(shù)據(jù)庫(kù)是一種部署在虛擬計(jì)算環(huán)境的數(shù)據(jù)庫(kù),它融合了云計(jì)算的彈性和可擴(kuò)展性,為用戶(hù)提供高效、靈活的數(shù)據(jù)庫(kù)服務(wù)。云數(shù)據(jù)庫(kù)主要分為兩大類(lèi):關(guān)系型
    的頭像 發(fā)表于 01-07 10:22 ?516次閱讀

    騰訊ima升級(jí)知識(shí)庫(kù)功能,上線(xiàn)小程序?qū)崿F(xiàn)共享與便捷問(wèn)答

    近日,騰訊旗下的AI智能工作臺(tái)ima.copilot(簡(jiǎn)稱(chēng)ima)迎來(lái)了知識(shí)庫(kù)功能的重大升級(jí)。此次升級(jí)不僅增加了“共享知識(shí)庫(kù)”的新能力,還正式上線(xiàn)了“ima知識(shí)庫(kù)”小程序,為用戶(hù)帶來(lái)了
    的頭像 發(fā)表于 12-31 15:32 ?1848次閱讀

    Java 23功能介紹

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

    HAL庫(kù)和標(biāo)準(zhǔn)庫(kù)的區(qū)別 HAL庫(kù)與CMSIS的關(guān)系

    在嵌入式系統(tǒng)開(kāi)發(fā),HAL(硬件抽象層)庫(kù)和標(biāo)準(zhǔn)庫(kù)是兩種常用的軟件庫(kù),它們?cè)?b class='flag-5'>功能和使用場(chǎng)景上有所不同。 1. 標(biāo)準(zhǔn)
    的頭像 發(fā)表于 12-02 14:02 ?3273次閱讀

    HAL庫(kù)在STM32開(kāi)發(fā)的重要性

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

    HAL庫(kù)在嵌入式系統(tǒng)的應(yīng)用

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

    支持外擴(kuò)sd卡功能的串口數(shù)據(jù)庫(kù)模塊

    往期文章介紹了LS10串口數(shù)據(jù)庫(kù)模塊的SQL數(shù)據(jù)庫(kù)存取功能,片內(nèi)容量測(cè)試如下: 容量測(cè)試,分享如下: 表格結(jié)構(gòu)(sn int primary key not null,id int,p1 int
    發(fā)表于 11-23 09:50

    LS10串口數(shù)據(jù)庫(kù)模塊外擴(kuò)SD卡功能

    LS10串口數(shù)據(jù)庫(kù)模塊外擴(kuò)SD卡功能
    的頭像 發(fā)表于 11-23 09:42 ?548次閱讀
    LS10串口數(shù)據(jù)<b class='flag-5'>庫(kù)</b>模塊外擴(kuò)SD卡<b class='flag-5'>功能</b>

    Python庫(kù)解析:通過(guò)庫(kù)實(shí)現(xiàn)代理請(qǐng)求與數(shù)據(jù)抓取

    在Python,有多個(gè)庫(kù)可以幫助你實(shí)現(xiàn)代理請(qǐng)求和數(shù)據(jù)抓取。這些庫(kù)提供了豐富的功能和靈活的API,使得你可以輕松地發(fā)送HTTP請(qǐng)求、處理響應(yīng)、解析HTML/XML/JSON數(shù)據(jù),以及進(jìn)
    的頭像 發(fā)表于 10-24 07:54 ?487次閱讀