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

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

作者头像
AI算法与图像处理
发布2021-03-26 14:40:24
2.7K0
发布2021-03-26 14:40:24
举报

引言

JSON(JavaScript对象表示法的缩写)是一种开放标准。虽然它的名字并不意味着这样,但它是一种独立于语言的数据格式。JSON 用于存储和交换数据。它是一种流行的数据格式,因为它也很容易为人类读写。在 Python 中使用 JSON 非常简单!Python 有两种数据类型,它们组成了在 Python 中使用 JSON 的完美工具: dictionary 和 lists。

用 Python 导入 JSON 库

Python 附带了一个强大而优雅的 JSON 库,可以帮助你对 JSON 进行解码和编码。它可以通过以下方式导入:

代码语言:javascript
复制
import json

1. 如何在 Python 中解析 JSON

解析 JSON 数据的字符串(也称为解码 JSON)就像使用 JSON.load (...)(load 是 load string 的缩写)一样简单。

下面是一个使用 json.loads 的例子:

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

输出可能看起来像字符串,但实际上它是一个字典,我们可以在代码中使用它,例如:

代码语言:javascript
复制
>>> type(data)
<class 'dict'>
>>> print('Hello', data['name'], "you're", data['age'], 'years old')
Hello erik you're 38 years old

2. 用 Python 编码 JSON

使用Python编码JSON数据就像解码一样容易。使用 json.dumps (...)(“ dump to string”的缩写)将包含 dictionary、 lists 和其他类型的 Python 对象转换为字符串:

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

这是同一个文档,转换回一个字符串!如果你想让 JSON 文档对于人们来说更具可读性,请使用缩进选项。它将很好地格式化 JSON,使用空格字符:

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

3. 使用 JSON 模块漂亮地打印 JSON

Python 的 JSON 模块也可以在命令行中使用:

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

如果你对此感兴趣,可以尝试使用jq工具。

4. 如何用 python 读取 JSON 文件

除了 json.loads 之外,还有一个名为 json.load 的函数(不带 s)。它将从文件中加载数据。如果你想把 JSON 文件的内容读入 Python 并解析它,可以使用下面的例子:

代码语言:javascript
复制
with open('data.json') as json_file:
    data = json.load(json_file)
    ...

5. 如何在 Python 中将 JSON 写入文件

json.dump函数用于将数据写入JSON文件。

代码语言:javascript
复制
data = {'name': 'Eric', 'age': 38 }
with open('data.json', 'w') as json_file:
    json.dump(data, json_file)

6. 使用 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来安装它。

代码语言: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]
>>>
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI算法与图像处理 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档