Как красиво вывести JSON-файл в Python (6 методов)

В этом уроке вы узнаете, как использовать Python для красивой печати JSON. Когда вы получаете файл JSON или получаете JSON из API, он обычно будет в минифицированной версии, чтобы сэкономить пропускную способность.

Но для чтения JSON или отладки часто бывает проще распечатать JSON в более структурированном формате. Красивая печать означает наличие правильных переносов строк, отступов, пробелов и общей структуры.

К концу этого урока вы узнаете:

  • Как красиво распечатать объект JSON в Python

  • Как красиво распечатать файл JSON с помощью Python

  • Как красиво распечатать файл JSON с помощью модуля pprint

  • Как сортировать ключи в файле JSON во время красивой печати

  • Как сохранить красиво напечатанный объект JSON в файл

Оглавление

Что такое JSON?

JSON расшифровывается как JavaScript Object Notation (Нотация Объектов JavaScript). Хотя в названии и присутствует JavaScript, не пугайтесь! В этом руководстве мы будем использовать Python для работы с JSON-файлом. JSON — это легкий формат обмена данными, который легко читается и записывается машинами, а также прост для понимания людьми.

Когда вы смотрите на JSON-файл, вы, вероятно, заметите, насколько JSON похож на словарь Python. Фактически, это верно и для многих других языков, что делает JSON отличным форматом обмена данными. JSON будет содержать ключ и значение для каждой пары, разделенных запятыми. Значение также может быть списком (или массивом) элементов или другим объектом, похожим на словарь.

Как красиво распечатать файл JSON на Python

Давайте посмотрим, что мы подразумеваем под "красивым выводом" JSON в Python. Обычно 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-файл, давайте посмотрим, как мы можем красиво вывести JSON-файл в Python.

Давайте посмотрим, как вы можете красиво вывести JSON-файл с помощью Python. Если у вас нет собственного JSON-файла или вы просто хотите следовать руководству построчно, я предоставил образец JSON-файла. Вы можете скачать файл здесь, просто нажав «Сохранить как» по этой ссылке.

Нашим первым шагом будет чтение JSON-файла. Мы можем добиться этого, используя менеджер контекста для загрузки файла. Давайте посмотрим, как мы можем это сделать в Python:

# Чтение JSON-файла с помощью менеджера контекста в 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)

# Возвращает: {'activity': 'Plan a trip to another country', 'type': 'recreational', 'participants': 1, 'price': 0, 'link': '', 'key': '5554727', 'accessibility': 0}

Разберем, что мы сделали выше:

  • Используя ключевое слово with, Python управляет некоторыми ресурсами открытия файла для нас.

  • Затем мы можем, как показано выше, использовать присвоенный нами псевдоним read_file в части нашего кода с отступом.

  • Мы используем функцию json.load(), чтобы загрузить файл в словарь Python.

  • Когда мы распечатываем файл, мы видим, что он распечатывается как минимизированная, плоская версия JSON-кода.

Библиотека json поставляется с функцией dumps(), которая позволяет сбросить объект в виде строки. Один из параметров функции позволяет нам настроить отступ, с которым мы хотим, чтобы был отформатирован наш JSON-объект.

Давайте посмотрим, как мы можем распечатать его в более структурированном формате, используя метод 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)

# Возвращает:
# {
#     "activity": "Plan a trip to another country",
#     "type": "recreational",
#     "participants": 1,
#     "price": 0,
#     "link": "",
#     "key": "5554727",
#     "accessibility": 0
# }

Разберем, что мы здесь сделали:

  • Мы загружаем путь к нашему файлу в переменную file_path. Если вы используете Windows, может быть полезно добавить префикс r к вашей строке, чтобы загрузить ее как необработанную строку, чтобы предотвратить случайное экранирование обратными слешами.

  • Затем мы используем менеджер контекста для чтения нашего файла (это обозначается mode='r')

  • Мы загружаем наш JSON-объект с помощью метода json.load()

  • Затем мы сбрасываем этот объект в строку с помощью метода .dumps(), указывая количество пробелов, которое мы хотим использовать для отступа нашего JSON

  • Наконец, мы распечатываем файл, и он выглядит намного, намного лучше!

В следующем разделе вы узнаете, как использовать Python для красивого форматирования данных JSON, которые вы получаете от API.

Как красиво вывести JSON из API в Python

Часто, когда вы работаете с JSON в Python, это происходит через API с использованием библиотеки requests. Давайте воспользуемся Bored API, чтобы загрузить образец JSON-файла. Для этого мы импортируем requests для обработки вызова API.

# Загрузка и сериализация данных из API

import requests

import json

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

# Распечатать необработанный JSON
print(response.json())

# Печать красиво оформленного JSON
pretty_json = json.dumps(response.json(), indent=4)
print(pretty_json)

# Возвращает:
# {'activity': "Clean out your closet and donate the clothes you've outgrown", 'type': 'charity', 'participants': 1, 'price': 0, 'link': '', 'key': '9026787', 'accessibility': 0.1}

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

В приведенном выше примере мы:

  • Импортировали библиотеки requests и json.

  • Затем мы используем функцию requests.get(), чтобы загрузить конечную точку API из Bored API и присвоить ее нашей переменной response.

  • Затем мы используем метод .json(), который сериализует возвращенную строку в словарь Python, анализируя возвращенные данные JSON.

Теперь, когда у нас есть JSON, загруженный из API с помощью Python, давайте посмотрим, как мы можем распечатать его в более красивом формате:

# Pretty printing JSON Returned from an API

import requests

import json

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

# Распечатать необработанный JSON
print(response.json())

# Печать красиво оформленного JSON
pretty_response = json.dumps(response.json(), indent=4)
print(pretty_response)

# Возвращает:
# {'activity': "Have a football scrimmage with some friends", 'type': 'social', 'participants': 8, 'price': 0, 'link': '', 'key': '1638604', 'accessibility': 0.2}

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

# Объяснение обоих подходов к красивой печати:

* **Первый подход:**
    * Мы сохраняем результат `response.json()` в отдельную переменную `json_response`.
    * Затем мы используем эту переменную для вызова `json.dumps()` с отступом 4.

* **Второй подход (более краткий):**
    * Мы напрямую передаем `response.json()` в `json.dumps()`. 

Оба подхода достигают того же результата - печати красиво оформленного JSON. Первый подход может быть полезен, если вы хотите сохранить результат для дальнейшего использования, а второй подход более лаконичен, если вы просто хотите сразу распечатать его.

Сортировка ключей при красивом выводе JSON-файла в Python

При работе с большими JSON-файлами может быть очень полезно отсортировать ключи в алфавитном порядке, чтобы лучше понимать файл. Мы можем использовать параметр sort_keys=, чтобы гарантировать, что наши ключи отсортированы в алфавитном порядке.

Давайте посмотрим, как отсортировать наши ключи JSON в красиво отформатированном объекте:

import requests

import json

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

# Распечатать необработанный JSON
print(response.json())

# Печать красиво оформленного JSON с сортировкой ключей
pretty_response = json.dumps(response.json(), indent=4, sort_keys=True)
print(pretty_response)

# Возвращает:
# {'activity': "Go swimming with a friend", 'type': 'social', 'participants': 2, 'price': 0.1, 'link': '', 'key': '1505028', 'accessibility': 0.1}

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

В приведенном выше блоке кода мы сериализовали ответ API с помощью библиотеки requests. Это позволило нам затем сбросить объект в строку с помощью функции json.dumps(). В этой функции мы указали, что хотим сделать отступ значений с помощью четырех пробелов и что мы хотим, чтобы ключи были отсортированы в алфавитном порядке.

Теперь, когда у вас есть четкое представление о том, как красиво распечатать JSON-файл, давайте посмотрим, как сохранить эти красиво отформатированные объекты в файл.

Как красиво вывести JSON-файл из командной строки

При работе в терминале бывает полезно красиво распечатать JSON-файл непосредственно в терминале. Python делает это довольно просто! Модуль json.tool предоставляет простой и элегантный интерфейс командной строки для красивой печати JSON-объектов.

Находясь в терминале, вы можете просто вызвать следующую команду:

# Красивый вывод JSON-файла из командной строки

(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
}

Важная часть для запуска здесь — python3 -m json.tool sample.json, где sample.json — это путь к вашему JSON-файлу. Это красиво распечатает JSON-файл прямо в вашем терминале!

Как сохранить красиво отформатированный JSON в файл с помощью Python

Теперь, когда вы знаете, как использовать Python для красивой печати JSON-файла и ответа от веб-API, давайте посмотрим, как вы можете сохранить отформатированную версию JSON-объекта в файл. Это может быть полезно при работе с большими объектами, так как чтение вывода в терминале вашего редактора кода может быть сложнее, чем необходимо.

Для этого мы снова будем использовать менеджер контекста. Однако на этот раз вместо использования его для управления чтением файла мы будем использовать его для записи файла. Из-за этого мы изменим mode= на 'w' для записи.

Давайте начнем!

# Сохранение красиво отформатированного JSON-объекта в файл

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)

print(f"Успешно сохранено красиво отформатированное JSON в: {save_filepath}")

Давайте посмотрим, что мы здесь сделали:

  • Мы создали наш объект response.

  • Мы создали переменную save_filepath, указывающую, куда мы хотим сохранить наш файл. В этом случае файл будет сохранен туда, где выполняется скрипт.

  • Мы используем ключевое слово with для создания файла, доступного для записи, куда затем сбрасываем наш объект, используя ключевое слово indent=.

  • Менеджер контекста обработает закрытие файла после того, как он закончит сохранение файла для нас.

Используя этот подход, вы успешно сохранили красиво отформатированный JSON-файл с помощью Python!

Как красиво вывести JSON-файл в Python с помощью pprint

Модуль pprint («pretty print») встроен в Python 3 и позволяет легко красиво выводить различные объекты. Среди этих объектов, доступных для более красивой печати, есть JSON-объекты, которые были сериализованы в словари Python!

Поскольку библиотека pprint встроена, вам не нужно ее устанавливать. Чтобы использовать библиотеку, мы можем импортировать только функцию pprint из библиотеки.

# Использование библиотеки pprint для красивого вывода JSON-файла

import json
from pprint import pprint

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

# Возвращает:
# {'accessibility': 0,
#  'activity': 'Plan a trip to another country',
#  'key': '5554727',
#  'link': '',
#  'participants': 1,
#  'price': 0,
#  'type': 'recreational'}

В приведенном выше коде мы загрузили JSON-файл, как делали и раньше, используя функцию json.load(). Затем мы передали сериализованный объект в функцию pprint(), которая позволяет нам распечатать файл в более красивом, несжатом виде.

Заключение

В этом посте вы узнали, как красиво вывести JSON-объект в Python. Это может быть полезным навыком, когда вы углубляетесь в анализ данных JSON или устраняете неполадки, связанные с неправильной работой чего-либо. Вы узнали, как красиво вывести JSON-объект из JSON-файла, как красиво вывести ответ JSON от веб-API в Python, а также как использовать Python для сохранения красиво отформатированного JSON в файл.

Чтобы узнать больше о модуле JSON, ознакомьтесь с официальной документацией здесь.

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с учебными пособиями ниже:

Last updated