快速回答:用于美观打印 JSONjson.dumps()

Python 中漂亮地打印 JSON 文件(6 种方法)_JSON

什么是JSON?

JSON 代表 JavaScript 对象表示法。虽然它包含名称 JavaScript,但不要惊慌!在本教程中,我们将使用 Python 来操作 JSON 文件。JSON是一种轻量级的数据交换格式,易于机器读取和写入,也易于人类理解。

当您查看 JSON 文件时,您可能会注意到 JSON 与 Python 字典的相似之处。事实上,许多其他语言都是如此,这使得 JSON 成为一种很好的数据交换格式。JSON 将包含每个对的键和一个值,以逗号分隔。值也可以是项的列表(或数组),也可以是另一个类似字典的对象。

让我们来看看我们在 Python 中漂亮打印 JSON 是什么意思。通常,JSON 将以最小化的形式出现,以便在下载时节省带宽。因此,它通常看起来像这样:

{"activity":"Plan a trip to another country","type":"recreational","participants":1,"price":0,"link":"","key":"5554727","accessibility":0}

当我们想漂亮地打印 JSON 文件时,我们的意思是添加适当的结构、缩进、空格等。我们上面的例子将如下所示:

{
  "activity": "Plan a trip to another country",
  "type": "recreational",
  "participants": 1,
  "price": 0,
  "link": "",
  "key": "5554727",
  "accessibility": 0
}

现在您知道漂亮打印的 JSON 文件是什么样子的,让我们看看如何在 Python 中漂亮打印 JSON 文件。

如何在 Python 中漂亮地打印 JSON 文件

让我们来看看如何使用 Python 漂亮地打印 JSON 文件。如果您没有自己的 JSON 文件,或者只想逐行按照教程进行操作,我提供了一个示例 JSON 文件。您可以在此处下载文件,只需单击此处链接上的“另存为”。

我们的第一步是读取 JSON 文件。我们可以通过使用上下文管理器加载文件来实现这一点。让我们看看如何在 Python 中做到这一点:

# Reading a JSON File with a Context Manager in Python
import json
file_path = "/Users/nikpi/Desktop/sample.json"

with open(file=file_path, mode='r') as read_file:
    object = json.load(read_file)
    print(object)

# Returns: {'activity': 'Plan a trip to another country', 'type': 'recreational', 'participants': 1, 'price': 0, 'link': '', 'key': '5554727', 'accessibility': 0}

让我们分解一下我们上面所做的工作:

  1. 通过使用关键字,Python 为我们管理一些打开文件的资源。with
  2. 然后,如上所示,我们可以在代码的缩进部分使用我们分配的别名 。read_file
  3. 我们使用该函数将文件加载到 Python 字典中。json.load()
  4. 当我们打印出文件时,我们可以看到它被打印出来,作为 JSON 代码的最小化平面版本。

该库带有一个函数,它允许您将对象作为字符串转储。该函数的一个参数允许我们自定义我们希望 JSON 对象缩进的缩进。jsondumps()

让我们看看如何使用以下方法以更结构化的格式打印出来:json_dumps()

import json
file_path = "/Users/nikpi/Desktop/sample.json"

with open(file=file_path, mode='r') as read_file:
    object = json.load(read_file)
    pretty_object = json.dumps(object, indent=4)
    print(pretty_object)

# Returns:
# {
#     "activity": "Plan a trip to another country",
#     "type": "recreational",
#     "participants": 1,
#     "price": 0,
#     "link": "",
#     "key": "5554727",
#     "accessibility": 0
# }

让我们来探讨一下我们在这里做了什么:

  1. 我们将文件路径加载到一个 变量中。如果您使用的是 Windows,则在字符串前面加上 an 会很有帮助,以将其加载为原始字符串,以防止意外使用反斜杠转义。file_pathr
  2. 然后,我们使用上下文管理器来读取我们的文件(这由mode='r')
  3. 我们使用以下方法加载 JSON 对象json.load()
  4. 然后,我们使用该方法将此对象转储到字符串中,指定要用于缩进 JSON 的空格数.dumps()
  5. 最后,我们打印文件,它看起来更漂亮了!

在下一节中,你将了解如何使用 Python 美化从 API 获取的 JSON 数据。

如何在 Python 中从 API 打印 JSON

很多时候,当您在 Python 中使用 JSON 时,它将通过使用请求库的 API。让我们使用 Bored API 来加载示例 JSON 文件。为此,我们将导入以处理 API 的调用。requests

让我们看一下如何使用 HTTP GET 请求从 API 端点获取数据。

# Loading and Serializing Data From an API
import requests
import json

response = requests.get("https://www.boredapi.com/api/activity")
print(response.json())

# Returns: {'activity': "Clean out your closet and donate the clothes you've outgrown", 'type': 'charity', 'participants': 1, 'price': 0, 'link': '', 'key': '9026787', 'accessibility': 0.1}

在上面的例子中,我们:

  1. 导入了 和 库requestsjson
  2. 然后我们使用函数requests.get()从 Bored API 加载 API 端点并将其分配给我们的变量response
  3. 然后我们使用方法.json(),通过解析返回的 JSON 数据,将返回的字符串序列化为 Python 字典

现在我们已经用 Python 从 API 加载了 JSON,让我们来看看如何以更漂亮的格式打印出来:

# Pretty printing JSON Returned from an API
import requests
import json

response = requests.get("https://www.boredapi.com/api/activity")
json_response = response.json()
pretty_response = json.dumps(json_response, indent=4)

# You could also write:
pretty_response = json.dumps(response.json(), indent=4)

print(pretty_response)

# Returns:
# {
#     "activity": "Have a football scrimmage with some friends",
#     "type": "social",
#     "participants": 8,
#     "price": 0,
#     "link": "",
#     "key": "1638604",
#     "accessibility": 0.2
# }

在 Python 中漂亮地打印 JSON 文件时对键进行排序

在处理大型 JSON 文件时,按字母顺序对键进行排序会非常有帮助,以便更好地理解文件。我们可以使用该参数来确保我们的键按字母顺序排序。sort_keys=

让我们看一下如何在一个漂亮的打印对象中对 JSON 键进行排序:

import requests
import json

response = requests.get("https://www.boredapi.com/api/activity")
pretty_response = json.dumps(response.json(), indent=4, sort_keys=True)
print(pretty_response)

# Returns:
# {
#     "accessibility": 0.1,
#     "activity": "Go swimming with a friend",
#     "key": "1505028",
#     "link": "",
#     "participants": 2,
#     "price": 0.1,
#     "type": "social"
# }

在上面的代码块中,我们使用 requests 库序列化了 API 响应。这允许我们使用 json.dumps() 函数将对象转储到字符串中。在此函数中,我们指定要使用四个空格缩进值,并希望按字母顺序对键进行排序。

现在您已经对如何漂亮打印 JSON 文件有了深刻的了解,让我们来看看如何将这些漂亮的打印对象保存到文件中。

如何从命令行漂亮地打印 JSON 文件

当您在终端中工作时,直接在终端中漂亮地打印 JSON 文件会很有帮助。Python 使做到这一点变得非常容易!该模块提供了一个简单而优雅的命令行界面来美观地打印 JSON 对象。json.tool

当您在终端中时,只需调用以下命令:

# Pretty Printing a JSON File from the Command Line
(base) nik % python3 -m json.tool sample.json
{
    "activity": "Plan a trip to another country",
    "type": "recreational",
    "participants": 1,
    "price": 0,
    "link": "",
    "key": "5554727",
    "accessibility": 0
}

这里要运行的重要部分是 JSON 文件的路径在哪里。这将直接在您的终端中打印JSON文件!python3 -m json.tool sample.jsonsample.json

如何使用 Python 将漂亮的打印 JSON 保存到文件

现在,您已经知道如何使用 Python 漂亮地打印 JSON 文件和来自 Web API 的响应,让我们看一下如何将 JSON 对象的格式化版本保存到文件中。当您处理大型对象时,这可能很有帮助,因为在代码编辑器终端中读取输出可能比必要的更难。

为了实现这一点,我们将再次使用上下文管理器。然而,这一次,我们将使用它来编写文件,而不是使用它来管理读取文件。因此,我们将 更改为 for write。mode='w'

让我们开始吧!

# Saving a Pretty Printed JSON Object to a File
import requests
import json

response = requests.get("https://www.boredapi.com/api/activity")
save_filepath = 'pretty.json'

with open(file=save_filepath, mode='w') as output_file:
    json.dump(response.json(), output_file, indent=4)

让我们看看我们在这里做了什么:

  1. 我们创建了响应对象
  2. 我们创建了一个 变量,用于将文件保存到的位置。在这种情况下,文件将保存到脚本运行的任何位置。save_filepath
  3. 我们使用关键字创建一个可写文件,然后使用关键字将对象转储到其中withindent=
  4. 上下文管理器将在为我们保存完文件后处理关闭文件。

使用这种方法,你已经成功地使用 Python 保存了一个漂亮的打印 JSON 文件!

如何使用 pprint 在 Python 中漂亮地打印 JSON 文件

pprint(“漂亮打印”)模块内置于 Python 3 中,允许您轻松地漂亮打印不同的对象。在这些可以更好地打印的对象中,有 JSON 对象,它们已被序列化为 Python 字典!

由于该库是内置的,因此无需安装它。为了使用该库,我们可以只从该库中导入函数。pprintpprint

# Using the pprint Library to Pretty Print a JSON File
import json
from pprint import pprint

with open('/Users/nikpi/Desktop/sample.json', 'r') as f:
    data = json.load(f)
    pprint(data)

# Returns:
# {'accessibility': 0,
#  'activity': 'Plan a trip to another country',
#  'key': '5554727',
#  'link': '',
#  'participants': 1,
#  'price': 0,
#  'type': 'recreational'}

在上面的代码中,我们像之前一样,使用函数加载了 JSON 文件。然后,我们将序列化的对象传递到函数中,这使我们能够以更漂亮、未压缩的方式打印文件。json.load()pprint()