все Python 3Файлы и I/Oпонятие
json
json
Сериализация/десериализация JSON. dumps/loads — строки. dump/load — файлы. Поддерживает dict, list, str, int, float, bool, None.
Синтаксис
import json
json.dumps(obj)
json.loads(s)
Обратная дорога не тождественна: кортеж после dumps/loads вернётся списком, а нестроковые ключи словаря станут строками — 1 превратится в '1'. По умолчанию ensure_ascii=True, и кириллица уезжает в \uXXXX-экранирование; для читаемого файла передавайте ensure_ascii=False. Множества, datetime и Decimal модуль не умеет и бросает TypeError — приводите их к поддерживаемым типам сами или через параметр default.
Примеры
import json, os, tempfile
data = {'name': 'Alice', 'age': 30, 'langs': ['Python', 'Rust']}
print(json.dumps(data)) # → {"name": "Alice", "age": 30, "langs": ["Python", "Rust"]}
print(json.dumps(data, indent=2)) # красивый JSON с отступами
parsed = json.loads('{"x": 1, "y": [1, 2, 3]}')
print(parsed, type(parsed)) # → {'x': 1, 'y': [1, 2, 3]} <class 'dict'>
path = os.path.join(tempfile.gettempdir(), 'data.json')
with open(path, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2)
with open(path, encoding='utf-8') as f:
loaded = json.load(f)
print(loaded['name']) # → Alice
import json, os, tempfile
# ensure_ascii=False — для кириллицы
d2 = {'имя':'Алиса'}
print(json.dumps(d2, ensure_ascii=False)) # → {"имя": "Алиса"}
import json, os, tempfile
# JSONDecodeError
try:
json.loads('invalid')
except json.JSONDecodeError as e:
print(e) # → Expecting value...
import json, os, tempfile
# Кастомный default для нестандартных типов
from datetime import date
def default(obj):
if isinstance(obj, date):
return obj.isoformat()
raise TypeError
print(json.dumps({'date': date(2024,1,1)}, default=default)) # → {"date":"2024-01-01"}
import json, os, tempfile
# sort_keys
print(json.dumps({'b':2,'a':1}, sort_keys=True)) # → {"a": 1, "b": 2}
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности