当前位置: 首页 > news >正文

json_extract提取复杂json_4个小窍门,让你在Python中高效使用JSON

全文共1990字,预计学习时长5分钟

161e6410929dd59edad99797bfba945f.png

图源:unsplash

字典和列表是 Python的两种数据类型,也是用来处理JSON的完美工具。本文将主要分享以下内容:

· 如何载入、编写JSON?

· 如何在命令行上优化、校验JSON?

· 如何通过使用JMESPath对JSON文档执行高级查询?

1. JSON解码

Python自带一个功能强大、内容丰富的JSON库。可通过以下方式导入:

import json

解码JSON字符串很简单,直接输入 json.loads(…) 即可。它可以转换成:

· 字典对象

· 列表数组

· 识别布尔值、整数、浮点数和字符串,在Python中进行正确转换。

· 任何 null 都将被转换为Python的None类型。

以下为json.loads 的一个实例:

>>> import json>>> jsonstring = '{"name": "erik","age": 38, "married": true}'>>> json.loads(jsonstring){'name': 'erik', 'age': 38, 'married': True}

2.JSON编码

编码JSON也很简单。使用json.dumps(…) 把由字典、列表和其他本机类型组成的Python对象转换为字符串:

>>> myjson = {'name': 'erik', 'age': 38, 'married': True}>>> json.dumps(myjson)'{"name": "erik", "age": 38, "married":true}'

这其实是一个完全相同的文档,只是被转换成了字符串。所以,要想让JSON文档更易读,可使用缩进选项:

>>> print(json.dumps(myjson, indent=2)){  "name": "erik",  "age": 38,  "married": true}

3. 命令行用法

JSON库也可从命令行使用,以校验、优化JSON:

$ echo "{ "name": "Monty", "age":45 }" | python3 -m json.tool{    "name": "Monty",    "age": 45}

如果你的电脑系统是Mac或Linux,并且能够安装JSON库的话,那么你也可以研究一下jq 命令行工具。它除了有便于记忆,可以润色代码等优点外,还有许多其他特点。

46d2b38df8c8892a94fd9627d2840a56.png

jq将在默认情况下优化JSON

4. 使用JMESPath搜索JSON

9b833fb85464bd66eed31ad85eaaff85.png

JMESPath是一种JSON查询语言。它能够让你轻松地从JSON文档中获取所需数据。如果你用过JSON,就会觉得获取嵌套值并不难。

例:doc["person"]["age"]将在一个如下所示的文档中获取age的嵌套值:

{  "persons": {    "name": "erik",    "age": "38"  }}

但如果是像下面这样的文档,该如何从这一组人名中提取所有年龄字段呢?

{  "persons": [    { "name": "erik","age": 38 },    { "name": "john","age": 45 },    { "name": "rob","age": 14 }  ]}

我们可以简单地写一套关于这些人名的重复指令。虽然很容易,但重复指令运行较慢,会使你的代码复杂化。所以,这就该派JMESPath上场了!

用JMESPath表达式编写代码:

persons[*].age

它将返回一个包含所有年龄的数组:[38, 45, 14].

假设要筛选列表,只获取名为“erik”的人的年龄。你可以编写一个筛选程序来执行此操作:

persons[?name=='erik'].age

看,多么流畅!

因为JMESPath不属于Python标准库,所以你需要一起安装pip或pipenv。例如,在虚拟环境中使用pip:

$ pip3 install jmespath$ python3Python 3.8.2 (default, Jul 16 2020, 14:00:26)>>> import jmespath>>> j = { "people": [{ "name": "erik","age": 38 }] }>>> jmespath.search("people[*].age", j)[38]>>>
9be0e4a3ff3e404dcd52d9c3b3e561e6.png

现在就去试一试吧!请严格按照交互式教程操作,同时也不要忘了在JMESPath站点上查看示例哦!

f16e3b9dde6900db31214f81436acc62.png

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

相关文章:

  • 关于Windows phone 7 series开发方面的传言
  • centos找不到apt-get命令_Centos 使用 pyinstaller 打包踩坑分享
  • python cv2 imshow_Python-OpenCV 2. 图像基本操作
  • wild magic3 渲染状态更新和scene绘制
  • 跨域获取后台数据undefined_拨号跨域问题
  • 软件文档归类汇总
  • java aes加密_行走江湖,安全第一 | 尚硅谷Java安全密码学教程发布!
  • 今天是最后的悠闲。
  • kernel编译 openwrt_OpenWRT实践3:Click Modular Router
  • 关于Mercurial(Hg)
  • python异常处理机制_错误处理
  • 十进制浮点数的表示方法
  • python工作可以做什么菜_python3 特色菜
  • Evolution3D 的svn搬迁。
  • python网络自动化实例_python 自动化之路 day 08_2 网络编程
  • 11111111
  • CSS中外联样式表代表的含义
  • Idea+maven+scala构建包并在spark on yarn 运行
  • iOS小技巧之UIImagePickerController实现头像选择
  • java取消线程实例
  • jquery ajax学习笔记
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Phpstorm怎样批量删除空行?
  • storm drpc实例
  • 编写符合Python风格的对象
  • 创建一种深思熟虑的文化
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 简单易用的leetcode开发测试工具(npm)
  • 找一份好的前端工作,起点很重要
  • 走向全栈之MongoDB的使用
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • #在 README.md 中生成项目目录结构
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (一)u-boot-nand.bin的下载
  • (转)IOS中获取各种文件的目录路径的方法
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 8.0 发布到 IIS
  • .net mvc部分视图
  • .NET多线程执行函数
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @Autowired @Resource @Qualifier的区别
  • @vue/cli 3.x+引入jQuery
  • @取消转义
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)
  • [Google Guava] 2.1-不可变集合
  • [HCTF 2018]WarmUp (代码审计)
  • [JS]数据类型
  • [MICROSAR Adaptive] --- Hello Adaptive World
  • [Notes]python argparse模块
  • [Oh My C++ Diary]头文件使用之math.h与cmath