json.dumps красиво распечатать в Python

Содержание
Введение
Спецификация
JSON
Словарь
json.dumps + json.loads
Вложенные объекты
Типы данных
Статьи про Python

Введение

Если нужно вывести в консоль словарь или json это можно сделать с помощью json.dumps

Спецификация json.dumps

Если вы хотите сразу же изучить полученный json можно воспользоваться методом dumps()

json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw) Serialize obj to a JSON formatted str using this conversion table. The arguments have the same meaning as in dump(). Note Keys in key/value pairs of JSON are always of the type str. When a dictionary is converted into JSON, all the keys of the dictionary are coerced to strings. As a result of this, if a dictionary is converted into JSON and then back into a dictionary, the dictionary may not equal the original one. That is, loads(dumps(x)) != x if x has non-string keys.

JSON

Если нужно распечатать JSON

import json print(json.dumps(response.json(), indent=4))

Словарь

Если нужно распечатать не JSON а словарь, json.dumps нужно использовать так:

import json print(json.dumps(resp.dict, indent=4)) # Если нужно отсортировать словарь print(json.dumps(resp.dict, indent=4, sort_keys=True))

json.dumps + json.loads

Часто приходится использовать связку json.dumps + json.loads

import json response_json = json.loads(response.text) print(json.dumps(response_json, indent=4))

Banner image

Обратиться ко вложенному объекту

Предположим, приходит следующий json

{ "address": { "version": 1, "date": "2021-Aug-11", "cities": [ { "id": "0", "name": "malaga", "place": { "id": "100", "name": "Форт", "status": "VISITED" } }, { "id": "1", "name": "benalmadena", "place": { "id": "150", "name": "Парк Палома", "status": "VISITED" } } ] } }

Из него нам интересен только статус городов: посещён или не посещён.

Важно понимать, что если у вас есть объет типа dict применять json.dumps() не имеет смысла.

Допустим, полученный объект выглядит так:

data = { "address": { "version": 1, "date": "2026-Oct-12", "cities": [ { "id": "0", "name": "malaga", "place": { "id": "100", "name": "Форт", "status": "VISITED" } }, { "id": "1", "name": "benalmadena", "place": { "id": "150", "name": "Парк Палома", "status": "VISITED" } } ] } }

Можно сразу достать объект из словаря.

cities = data["address"]["cities"] for city in cities: print(city["place"]["status"])

VISITED
VISITED

Если нужно достать статус какого-то определённого места, важно не запутаться где список а где словарь

cities - это список, поэтому там нужно использовать не ключ а индекс, например [0] для Малаги

print(data["address"]["cities"][0]["place"]["status"])

VISITED

json.loads() пригодится если данные приходят в виде str

import json data_set = """{ "address": { "version": 1, "date": "2026-Oct-12", "cities": [ { "id": "0", "name": "malaga", "place": { "id": "100", "name": "Форт", "status": "VISITED" } }, { "id": "1", "name": "benalmadena", "place": { "id": "150", "name": "Парк Палома", "status": "VISITED" } } ] } }""" data_dir = json.loads(data_set) cities = data_dir["address"]["cities"] for city in cities: print(city["place"]["status"])

VISITED
VISITED

Ошибки

TypeError: the JSON object must be str, bytes or bytearray, not dict

Значит, что к объекту применяют неправильный метод. Чтобы понимать какой тип имеют объекты прочитайте следующий параграф.

Типы данных

Коротко:

json.dumps(): dict → str

json.loads(): str → dict

Нужно понимать с какими объектами вы работаете. С этим поможет функция type()

Допустим r = requests.get() тогда r это объект типа

<class 'requests.models.Response'>

Если применить метод json() тогда r.json() станет объектом типа dict

<class 'dict'>

К этому словарю теперь можно применить функцию json.dumps()

json.dumps(r.json()) будет иметь тип строки

<class 'str'>

Обратно в словарь можно переделать объект с помощью json.loads()

json.loads(json.dumps(r.json())) будет иметь тип

<class 'dict'>

Визуально различить эти объекты будет непросто. В PyCharm строка имеет " двойные кавычки

{"count": 6, "items":

А словарь ' одинарные

{'count': 6, 'items':

Article author: Andrei Olegovich

Похожие статьи
Python
Интерактивный режим
dict, list, str …
\: перенос строки
if, elif, else
Циклы
Функции
try except
Пакеты
ООП
Опеределить тип переменной Python
Работа с REST API на Python
Файлы: записать, прочитать…
Работа с базами данных
datetime: Дата и время в Python
Сложности при работе с Python
Фреймворки: Django, Flask
socket: Python Sockets
Виртуальное окружение
subprocess: bash команды из Python
multiprocessing: несколько процессов одновременно
psutil: cистемные ресурсы
sys.argv: аргументы командной строки
PyCharm: IDE
pydantic: валидация данных
paramiko: SSH из Python
logging: запись в лог
Обучение Python

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: