Python操作JSON

创建于 2024年7月21日修改于 2024年7月21日
PythonJSON

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 数据。