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

    文章

    7315

    浏览量

    93986
  • XML
    XML
    +关注

    关注

    0

    文章

    188

    浏览量

    34395
  • python
    +关注

    关注

    57

    文章

    4858

    浏览量

    89588
  • JSON
    +关注

    关注

    0

    文章

    125

    浏览量

    7704

原文标题:在 Python 中操纵 json 数据的最佳方式

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LuatOS MCU核心全接触:新手操作与功能测试攻略!

     MCU芯片级开发新手如何快速掌握核心技能?本文围绕LuatOS的MCU核心,系统演示时钟频率获取、唯一ID读取、高精度计时、IO复用配置等核心功能测试,并通过丰富示例,帮助开发者轻松入门,迅速
    的头像 发表于 11-12 14:30 142次阅读
    LuatOS MCU核心<b class='flag-5'>库</b>全接触:新手操作与<b class='flag-5'>功能</b>测试攻略!

    新手必备:LuatOS MCU核心功能测试与实践指南

    新手如何快速掌握MCU芯片级开发?本文通过LuatOS的MCU核心,全面演示时钟频率获取、唯一ID读取、高精度计时、IO复用配置等核心功能的测试流程,并提供实用示例,帮助开发者高效入门,轻松应对
    的头像 发表于 11-12 14:26 150次阅读
    新手必备:LuatOS MCU核心<b class='flag-5'>库</b><b class='flag-5'>功能</b>测试与实践指南

    NMSIS神经网络使用介绍

    NMSIS NN 软件是一组高效的神经网络内核,旨在最大限度地提高 Nuclei N 处理器内核上的神经网络的性能并最​​大限度地减少其内存占用。 该分为多个功能,每个功能涵盖特定
    发表于 10-29 06:08

    物联网短信实战:SMS收发功能速成来啦!

    在物联网开发,短信收发是常见需求。本文带来一场技术实战,借助SMS,10分钟内即可实现物联网短信的收发。通过简单易懂的教程,让你快速掌握这项功能,为物联网项目赋能。   SMS核心
    的头像 发表于 10-21 17:09 598次阅读
    物联网短信实战:SMS<b class='flag-5'>库</b>收发<b class='flag-5'>功能</b>速成来啦!

    常规网线最低能耐多少温度

    常规网线的最低耐受温度通常为-20℃,部分特殊类型网线可低至-40℃或-70℃。以下是具体分析: 一、常规网线的最低耐受温度 超五类网线:这是家庭和办公环境中常用的网线类型。其运行温度标准通常在
    的头像 发表于 09-29 09:42 615次阅读

    CANoeADAS功能介绍

    高级驾驶辅助系统(ADAS)在汽车的应用日益增长,为了满足工程师对于ADAS的分析、仿真和测试等功能的需求,CANoe从15.0版本开始提供ADASFeatureSet(ADAS功能集,简称AFS
    的头像 发表于 07-10 14:55 1053次阅读
    CANoe<b class='flag-5'>中</b>ADAS<b class='flag-5'>功能</b>集<b class='flag-5'>介绍</b>

    1.3 EMC是常规设计准则的例外情况

    1.3EMC是常规设计准则的例外情况产品的电路原理是用电路图来描述的,但是电路图是仅仅着眼于按原定目的传输信易带前把电路抽象化的模型。从EMC产生的原理分析,可以说功能电路图儿乎所的现免
    的头像 发表于 07-07 17:09 540次阅读
    1.3 EMC是<b class='flag-5'>常规</b>设计准则的例外情况

    基于STM32 HAL与标准的esp8266接入机智云方案(二)

    在《基于STM32HAL与标准的esp8266接入机智云方案(一)》,我们详细介绍了硬件连接和机智云客户端的创建。本篇将重点讲解如何下载代码、分析下载的代码,并直接使用这些代码连
    的头像 发表于 05-28 18:02 1118次阅读
    基于STM32 HAL<b class='flag-5'>库</b>与标准<b class='flag-5'>库</b>的esp8266接入机智云方案(二)

    MySQL数据采集网关是什么?有什么功能

    MySQL数据采集网关是一种用于连接、采集、处理并传输数据到MySQL数据的中间设备或软件系统,通常部署在数据源与MySQL数据之间,作为数据交互的桥梁。它在工业物联网、智能楼宇、能源管理等
    的头像 发表于 05-26 15:20 463次阅读

    在IEEE802.1CB(FRER)CB_EN(DPI) 或FRMREPEN(常规参数表)配置哪一个?

    配置 FRMREPEN 不出现在该表的常规参数表CB_EN我是否需要启用 CB_EN?? 我是否需要启用 Deep Inspection Table 是否CB_EN我是否需要启用此功能? 我找不到 FRMREPEN 那么我该如
    发表于 03-20 07:55

    微型导轨与常规直线导轨有哪些区别和用途?

    、低载荷的精密机械设备,比如数控加工机床、精密测量仪器等;而常规直线导轨通常用于工业机器人、雷达、光学器件等高精度设备
    发表于 03-05 16:25

    在D4100_usb.dll动态应该使用哪些相关的函数才能实现Activex的MemToFrameBuffer(),LoadToDMD() 功能

    使用Activex时可以正常读取图片并显示。但当使用D4100_usb.dll动态时,不清楚怎样才能将数据显示到DMD。 请问在D4100_usb.dll动态应该使用哪些相关的函数才能实现
    发表于 02-28 06:17

    Oracle数据的多功能集成开发环境

    Oracle数据的多功能集成开发环境 快捷菜单的可视化对象编辑器 上下文感知的SQL代码补全、智能格式化和重构 逐步执行的自动调试功能功能
    的头像 发表于 01-14 13:52 695次阅读
    Oracle数据<b class='flag-5'>库</b>的多<b class='flag-5'>功能</b>集成开发环境

    云数据是哪种数据类型?

    云数据是一种部署在虚拟计算环境的数据,它融合了云计算的弹性和可扩展性,为用户提供高效、灵活的数据服务。云数据主要分为两大类:关系型
    的头像 发表于 01-07 10:22 804次阅读

    腾讯ima升级知识功能,上线小程序实现共享与便捷问答

    近日,腾讯旗下的AI智能工作台ima.copilot(简称ima)迎来了知识功能的重大升级。此次升级不仅增加了“共享知识”的新能力,还正式上线了“ima知识”小程序,为用户带来了
    的头像 发表于 12-31 15:32 2622次阅读