当前位置:首页 > 应用开发

4个小窍门,让你在Python中高效使用JSON

本文转载自公众号“读芯术”(ID:AI_Discovery)。个小高效

字典和列表是窍门 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 命令行工具。它除了有便于记忆,可以润色代码等优点外,还有许多其他特点。

jq将在默认情况下优化JSON

4. 使用JMESPath搜索JSON

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] >>> 

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

【责任编辑:赵宁宁 TEL:(010)68476606】

云服务器提供商

分享到:

滇ICP备2023006006号-16