Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Python中操纵json数据的最佳方式

在Python中操纵json数据的最佳方式

作者头像
派大星的数据屋
发布于 2022-04-03 06:05:44
发布于 2022-04-03 06:05:44
4.5K00
代码可运行
举报
运行总次数:0
代码可运行

❝本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes ❞

1 简介

在日常使用Python的过程中,我们经常会与json格式的数据打交道,尤其是那种嵌套结构复杂的json数据,从中抽取复杂结构下键值对数据的过程枯燥且费事。

而熟悉xpath的朋友都知道,对于xml格式类型的具有层次结构的数据,我们可以通过编写xpath语句来灵活地提取出满足某些结构规则的数据。

类似的,JSONPath也是用于从json数据中按照层次规则抽取数据的一种实用工具,在Python中我们可以使用jsonpath这个库来实现JSONPath的功能。

2 在Python中使用JSONPath提取json数据

jsonpath是一个第三方库,所以我们首先需要通过pip install jsonpath对其进行安装。

2.1 一个简单的例子

安装完成后,我们首先来看一个简单的例子,从而初探其使用方式:

这里使用到的示例json数据来自高德地图步行导航接口,包含了从天安门广场到西单大悦城的步行导航结果,原始数据如下,层次结构较深:

假如我想要获取其嵌套结构中steps键值对下每段行程的耗时duration数据,配合jsonpath就可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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')

其中$..steps[*].duration就是我们用于描述数据位置规则的JSONPath语句,配合jsonpath()便可以提取出对应信息,下面我们就来学习jsonpath中支持的常用JSONPath语法:

2.2 jsonpath中的常用JSONPath语法

为了满足日常提取数据的需求,JSONPath中设计了一系列语法规则来实现对目标值的定位,其中常用的有:

  • 「按位置选择节点」

jsonpath中主要有以下几种按位置选择节点的方式:

功能

语法

根节点

$

当前节点

@

子节点

.或[]

任意子节点

*

任意后代节点

..

让我们来演示一下它们的一些用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 提取所有duration键对应值
jsonpath(demo_json, '$..duration')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 提取所有steps键的子节点对应instruction值
jsonpath(demo_json, '$..steps.*.instruction')
  • 「索引子节点」

有些时候我们需要在选择过程中对子节点做多选或按位置选择操作,就可以使用到jsonpath中的相关功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 多选所有steps键的子节点对应的instruction与action值
jsonpath(demo_json, '$..steps.*[instruction,action]')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 选择steps键的第0个子节点对应的instruction与action值
jsonpath(demo_json, '$..steps[0][instruction,action]')

# 选择steps键的第13(不包括3)个子节点对应的instruction与action值
jsonpath(demo_json, '$..steps[1:3][instruction,action]')

# 配合@,选择steps键的最后一个子节点对应的instruction与action值
jsonpath(demo_json, '$..steps[(@.length-1)][instruction,action]')
  • 「条件筛选」

有些时候我们需要根据子节点的某些键值对值,对选择的节点进行筛选,在jsonpath中支持常用的==!=><等比较运算符,以==比较符为例,这里配合@定位符从当前节点提取子节点,语法为?(@.键名 比较符 值)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 找到所有steps子节点中orientation为“西”的
jsonpath(demo_json, '$..steps[?(@.orientation == "西")]')

而如果想要提取所有具有指定键的节点,可以参考下面的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 找到所有具有polyline键的节点对应的polyline与road键对应值
jsonpath(demo_json, '$..[?(@.polyline)][polyline,road]')

2.3 返回结果的形式

在前面的例子中,我们所有的返回结果直接就是提取到的满足条件的结果,而jsonpath()中还提供了另一种特殊的结果返回形式,只需要设置参数result_type=None就可以改直接返回结果为返回每个结果的JSONPath表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 获取结果的JSONPath表达式
jsonpath(demo_json, '$..[?(@.polyline)][polyline,road]', result_type=None)

以上介绍的均为jsonpath库中的常规功能,可以满足基础的json数据提取需求,而除了jsonpath之外,还有其他具有更加丰富拓展功能的JSONPath类的第三方库,可以帮助我们实现很多进阶灵活的操作,我们将在下一篇文章中继续讨论。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
你真的会写接口自动化测试断言吗?
在接口测试中,断言是一项非常重要的操作,它是用来校验接口返回结果是否符合预期的一种手段。一般来说,接口测试断言大致可以分为以下几类:
一个正经的AI
2024/01/22
5300
你真的会写接口自动化测试断言吗?
25.后置处理器之JSON提取器
JSON提取器用于提取请求的结果是json格式数据中的某个值或者某一组值。标准写法为$.key,其中key为返回结果json中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值为一个数组,则使用.key[n],其中n为数组中元素的index。
BUG弄潮儿
2020/06/15
7150
25.后置处理器之JSON提取器
一篇长文带你在python里玩转Json数据
很多网站都会用到Json格式来进行数据的传输和交换,就像上篇我提到的网易云音乐接口,它们返回的数据都是Json格式的。
朱小五
2019/11/26
1.7K0
(数据科学学习手札126)Python中JSON结构数据的高效增删改操作
  在上一期文章中我们一起学习了在Python中如何使用jsonpath库,对JSON格式数据结构进行常规的节点条件查询,可以满足日常许多的数据处理需求。
Feffery
2021/08/10
8440
数据提取之JSON与JsonPATH
我们知道再爬虫的过程中我们对于爬取到的网页数据需要进行解析,因为大多数数据是不需要的,所以我们需要进行数据解析,常用的数据解析方式有正则表达式,xpath,bs4,这次我们来介绍一下另一个数据解析库--jsonpath,在此之前我们需要先了解一下什么是json。
前端皮皮
2021/12/02
2.2K0
数据提取之JSON与JsonPATH
【python接口自动化】- 使用json及jsonpath转换和提取数据
​ JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它可以让人们很容易的进行阅读和编写,同时也方便了机器进行解析和生成,适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。简单说就是javascript中的对象和数组,通过这两种结构可以表示各种复杂的结构。
huofo
2022/03/18
2.5K0
【python接口自动化】- 使用json及jsonpath转换和提取数据
使用jq处理JSON数据(二)
之前的文章使用jq处理JSON数据(一)中,我分享了jq工具的基本用法。今天开始分享jq的高阶使用,包括管道符、函数以及格式转换。
FunTester
2021/04/20
3.7K0
MySQL中处理JSON数据:大数据分析的新方向,MYSQL如何处理JSON数据,参数讲解+实战案例+全网最全
感谢您的观看,如果您喜欢这篇文章或者对您有所帮助的话,动动发财的小手点点关注,一起学习一起进步
小白的大数据之旅
2024/11/20
3280
MySQL中处理JSON数据:大数据分析的新方向,MYSQL如何处理JSON数据,参数讲解+实战案例+全网最全
python接口自动化33-json解析神器jsonpath
做接口测试的时候,大部分情况下返回的是json数据,我们需要对返回的json断言。 当返回的数据量比较大,并且嵌套的层级很深的时候,很多小伙伴不会取值,往往在返回结果取值上浪费很多时间,于是就有了 jsonpath 解析库,专门解决 json 路径深,取值难的问题。
上海-悠悠
2020/07/02
1.3K0
Python_实现json数据的jsonPath(精简版)定位及增删改操作
RIGHT_INDEX_DEFAULT = '200000000' # 右侧索引的默认值 未指定右侧索引时使用,形如 key[2:]、key[:]
授客
2019/09/10
1.2K0
Python_实现json数据的jsonPath(精简版)定位及增删改操作
Python数据提取Json
参考链接: Python-Json 2 : 使用json.load/loads读取JSON文件/字符串
用户7886150
2021/01/15
3.4K0
ThingJS结合Web地图API开发,让数据展示更加出色!
三维地图,是为了更好的数据可视化,以便更好地进行数据分析。ThingJS结合Web地图API开发了更多3D功能,让数据展示更加出色!
森友鹿锘
2020/09/21
1.8K0
ThingJS结合Web地图API开发,让数据展示更加出色!
Python爬虫(十六)_JSON模块与JsonPath
本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。 JSON和XML的比较可谓不相上下。 Python2.7中自带了JSON模块,直接import json就可以使用了。 官方博客:http://docs.python.org/library/
用户1174963
2018/01/17
2.4K0
Python爬虫(十六)_JSON模块与JsonPath
使用jq处理JSON数据(一)
在平常的工作中,遇到的接口响应格式绝大多数都是JSON格式,对于这种格式的数据有时候又爱又恨。很多时候要看懂层级,很多人会使用一些格式化工具(包括在线工具)。我自己写了一个方法来处理JSON格式的数据,之前写过文章:将json数据格式化输出到控制台,后来又更新了一些其他功能,修复了一些BUG,展示格式如下:
FunTester
2021/03/30
2.9K0
深入解析RedisJSON:在Redis中直接处理JSON数据
RedisJSON是Redis的一个扩展模块,它提供了对JSON数据的原生支持。通过RedisJSON,我们可以将JSON数据直接存储在Redis中,并利用丰富的命令集进行高效的查询和操作。RedisJSON不仅简化了数据处理的流程,还大幅提升了处理JSON数据的性能。
公众号:码到三十五
2024/05/24
1.8K0
深入解析RedisJSON:在Redis中直接处理JSON数据
Json数据
JSON(JavaScript Object Notation,即JavaScript对象表示法)是一种轻量级的数据交换格式。它独立于语言和平台,JSON解析器和JSON库支持不同的编程语言。JSON具有自我描述性,很容易理解。目前大多数接口返回的数据格式为JSON,因此进行接口测试必须掌握JSON。
清风穆云
2021/08/09
1.6K0
妙哉!cJSON设计思想解读及封装JSON数据方法示例
看了cJSON的源码后,惊呼其设计之巧妙,其代码之简洁,其使用之方便!只有两个文件cJSON.h和cJSON.c,非常适合学习C语言中的链表。
Mculover666
2020/07/16
3K0
妙哉!cJSON设计思想解读及封装JSON数据方法示例
【Python爬虫实战】从多类型网页数据到结构化JSON数据的高效提取策略
在互联网爬虫的过程中,面对大量网页数据,理解和区分不同类型的数据至关重要。无论是网页上的文本、数值信息,还是图片、链接、表格等内容,每一种数据类型都有其独特的结构和解析方法。通过合理利用相应的提取策略,爬虫可以高效获取有价值的数据。本篇文章将深入探讨不同类型网页数据的解析方法,并以 JSON 数据为例,详细介绍结构化数据的提取步骤,帮助读者更好地理解并掌握网页数据的爬取技术。
易辰君
2024/11/07
6090
使用JSONPath解析json数据
之前学习爬虫的时候,如果是 HTML 的数据,通过 xpath 或是 css 选择器,就能很快的获取我们想要的数据,如果是 json 有没有类似 xpath 这种,能够直接根据条件定位数据,而不需要自行 json 解析在遍历获取。答案是有的,也就是 JSONPath。
愧怍
2022/12/27
2.7K0
使用JSONPath解析json数据
如何使用Python对嵌套结构的JSON进行遍历获取链接并下载文件
JSON(JavaScript Object Notation)是一种基于JavaScript语言的轻量级数据交换格式,它用键值对的方式来表示各种数据类型,包括字符串、数字、布尔值、空值、数组和对象。数组是有序的数据集合,用[]包围,元素用逗号分隔;对象是无序的数据集合,用{}包围,属性用逗号分隔,属性名和属性值用冒号分隔。
jackcode
2023/02/23
11.4K0
如何使用Python对嵌套结构的JSON进行遍历获取链接并下载文件
推荐阅读
相关推荐
你真的会写接口自动化测试断言吗?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验