Python操作JSON
创建于 2024年7月21日修改于 2024年7月21日
Contents
Python 写入 JSON
Python 通过内置模块 json
支持 JSON 格式。json
模块专为读取和写入 JSON 格式的字符串而设计。这意味着你可以方便地将 Python 数据类型转换为 JSON 数据,反之亦然。
将 Python 字典转换为 JSON
在 Python 中处理 JSON 时,最常见的操作之一是将 Python 字典转换为 JSON 对象。
import json
movie_ratings = {"Inception": 9, "Interstellar": 8}
json.dumps(movie_ratings)
# '{"Inception": 9, "Interstellar": 8}'
Python 的 json 模块的一个很棒的功能是它为你处理转换。这在使用变量作为字典键时非常方便:
import json
movie_id = 1
movie_title = "Inception"
movie_db = {movie_id: {"title": movie_title}}
json.dumps(movie_db)
# '{"1": {"title": "Inception"}}'
序列化其他 Python 数据类型为 JSON
json
模块允许你将常见的 Python 数据类型转换为 JSON。
Python | JSON |
---|---|
dict | object |
list | array |
tuple | array |
tuple | array |
str | string |
int | number |
float | number |
True | true |
False | false |
None | null |
使用 Python 写入 JSON 文件
要将 Python 数据写入外部 JSON 文件,可以使用 json.dump()
。这个函数与你之前看到的函数相似,但没有末尾的 s
:
import json
movie_data = {
"title": "Inception",
"director": "Christopher Nolan",
"genres": ["Sci-Fi", "Thriller"],
"release_year": 2010,
"ratings": {
"IMDb": 8.8,
"Rotten Tomatoes": "87%",
},
"cast": [
{
"name": "Leonardo DiCaprio",
"role": "Cobb",
},
{
"name": "Joseph Gordon-Levitt",
"role": "Arthur",
},
],
}
with open("inception.json", mode="w", encoding="utf-8") as write_file:
json.dump(movie_data, write_file)
Python 读取 JSON
将 JSON 对象转换为 Python 字典
import json
movie_json = '{"1": {"title": "Inception"}}'
new_movie_db = json.loads(movie_json)
使用 Python 打开外部 JSON 文件
import json
with open("inception.json", mode="r", encoding="utf-8") as read_file:
movie_data = json.load(read_file)
type(movie_data)
# <class 'dict'>
movie_data["title"]
# 'Inception'
JSON 交互
终端验证 JSON
要快速检查 JSON 文件是否有效,可以利用 Python 的 json.tool
。可以使用 -m
开关在终端中以可执行文件形式运行 json.tool
模块。
$ python -m json.tool inception.json
{
"name": "Inception",
"rating": 8.8
}
要使 json.tool
报错,你需要使 JSON 文档无效。可以通过删除键值对之间的逗号 (,
) 使 inception.json 的 JSON 数据无效:
{
"name": "Inception"
"rating": 8.8
}
保存 dog_friend.json 后,再次运行 json.tool
以验证文件:
python -m json.tool inception.json
# Expecting ',' delimiter: line 2 column ...
终端中美化打印 JSON
python -m json.tool test.json --indent 2
默认情况下,json.tool
将输出写入 sys.stdout
,就像调用 print()
函数时一样。但你也可以通过提供位置 outfile 参数将 json.tool
的输出重定向到文件:
python -m json.tool test.json pretty.json
Python 压缩精简化 JSON
python -m json.tool pretty.json minified.json --compact
无论是通过 API 传输数据还是在文档数据库中存储信息,你都可能会遇到 JSON。Python 提供了强大的工具来简化这个过程,帮助你高效地管理 JSON 数据。