前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Python中有效使用JSON的4个技巧

在Python中有效使用JSON的4个技巧

作者头像
计算机与AI
发布2020-12-14 15:56:43
3.1K0
发布2020-12-14 15:56:43
举报
文章被收录于专栏:计算机与AI

在Python中使用JSON轻而易举,这将使您立即入门。

Python有两种数据类型,它们共同构成了使用JSON的理想工具:字典和列表。让我们探索如何:

  • 加载和编写JSON
  • 在命令行上漂亮打印并验证JSON
  • 使用JMESPath对JSON文档进行高级查询

1.解码JSON

Python附带了功能强大且优雅的 JSON库。它可以通过以下方式导入:

代码语言:javascript
复制
import json

解码JSON字符串非常简单 json.loads(…) (加载字符串的简称)。

它转换为:

  • 反对字典
  • 数组到列表,
  • 布尔值,整数,浮点数和字符串可以识别其含义,并将在Python中转换为正确的类型
  • 任何 null 都将转换为Python的 None 类型

这是一个实际的例子 json.loads :

代码语言:javascript
复制
>>> import json
>>> jsonstring = '{"name": "erik", "age": 38, "married": true}'
>>> json.loads(jsonstring){'name': 'erik', 'age': 38, 'married': True}

2.编码JSON

反之亦然。使用 json.dumps(…) (“转储为字符串”的缩写)将包含字典,列表和其他本机类型的Python对象转换为字符串:

代码语言:javascript
复制
>>> myjson = {'name': 'erik', 'age': 38, 'married': True}
>>> json.dumps(myjson)
'{"name": "erik", "age": 38, "married": true}'

这是完全相同的文档,转换回字符串!如果要使JSON文档更易被人类阅读,请使用indent选项:

代码语言:javascript
复制
>>> print(json.dumps(myjson, indent=2))
{
  "name": "erik",
  "age": 38,
  "married": true
}

3.命令行用法

JSON库也可以从命令行使用,以 验证 JSON 并进行 漂亮打印:

代码语言:javascript
复制
$ echo "{ \"name\": \"Monty\", \"age\": 45 }" | \
python3 -m json.tool
{
    "name": "Monty",
    "age": 45
}

jq默认会漂亮地打印您的JSON

4.使用JMESPath搜索JSON

JMESPath是JSON的查询语言。它使您可以轻松地从JSON文档中获取所需的数据。如果您以前使用过JSON,您可能知道获取嵌套值很容易。

例如:doc["person"]["age"] 将在如下所示的文档中为您提供年龄的嵌套值:

代码语言:javascript
复制
{
  "persons": {
    "name": "erik",
    "age": "38"
  }}

但是,如果您想从一系列人员中提取所有年龄段,在这样的文档中怎么办:

代码语言:javascript
复制
{
  "persons": [
    { "name": "erik", "age": 38 },
    { "name": "john", "age": 45 },
    { "name": "rob", "age": 14 }
  ]}

我们可以编写一个简单的循环,遍历所有人员。十分简单。但是循环很慢,会给您的代码带来复杂性。这就是JMESPath进来的地方!

这个JMESPath表达式将完成工作:

代码语言:javascript
复制
persons[*].age

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

假设您要过滤列表,仅获取名为“ erik”的人的年龄。您可以使用过滤器执行此操作:

代码语言:javascript
复制
persons[?name=='erik'].age

看看这有多自然和快速?

JMESPath不是Python标准库的一部分,这意味着您需要使用pip 或 进行安装 pipenv。例如, 在虚拟环境中使用 时 :pip

代码语言:javascript
复制
$ pip3 install jmespath
$ python3
Python 3.8.2 (default, Jul 16 2020, 14:00:26)
>>> import jmespath
>>> j = { "people": [{ "name": "erik", "age": 38 }] }
>>> jmespath.search("people[*].age", j)
[38]
>>>

您现在就可以开始尝试了!

如果您还有其他JSON技巧或窍门,请在评论中分享!

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

本文分享自 计算机与AI 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.解码JSON
  • 2.编码JSON
  • 3.命令行用法
  • 4.使用JMESPath搜索JSON
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档