[PYTHON:TODAY]
63.1K subscribers
2.31K photos
1.05K videos
293 files
1.45K links
Python скрипты, нейросети, боты, автоматизация. Всё бесплатно!

Приват: https://boosty.to/pythontoday
YouTube: https://clck.ru/3LfJhM
Канал админа: @akagodlike
Чат: @python2day_chat

Сотрудничество: @web_runner

Канал в РКН: https://clck.ru/3GBFVm
Download Telegram
👨‍💻 Как работать с JSON в Python: сохраняем, читаем и автоматизируем!

JSON — это лёгкий формат обмена данными, который читается человеком и отлично понимается компьютером. Несмотря на название (JavaScript Object Notation), он полностью независим от языка — и в Python работать с ним проще простого.

😰 В Python всё делает встроенный модуль json — никаких дополнительных библиотек не нужно.

Что к чему

* json.dump(obj, fp, ...) — сериализует obj сразу в файл/поток (fp), возвращает None.
* json.dumps(obj, ...) — сериализует в строку (удобно отправлять по сети/логировать).
* json.load(fp, ...) — читает из файла/потока и возвращает Python‑объект.
* json.loads(s, ...) — парсит из строки и возвращает Python‑объект.

Сохранение JSON (и разница dump/dumps)

import json

data = {
"name": "John",
"salary": 1499.9,
"is_real": False,
"titles": ["The Unknown", "Anonymous"]
}

# dump: сразу в файл
with open("data1.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=2) # возвращает None

# dumps: получаем строку (например, чтобы отправить в API)
payload = json.dumps(data, indent=2)
print(type(payload)) # <class 'str'>


# ensure_ascii: как сохранить не-ASCII символы без \uXXXX

По умолчанию JSON экранирует всё не-ASCII:

ru = {"first_name": "Алиса", "city": "München"}

print(json.dumps(ru))
# {"first_name": "\u0410\u043b\u0438\u0441\u0430", "city": "M\u00fcnchen"}

print(json.dumps(ru, ensure_ascii=False))
# {"first_name": "Алиса", "city": "München"}


В файл — обязательно с кодировкой:

with open("ru.json", "w", encoding="utf-8") as f:
json.dump(ru, f, ensure_ascii=False, indent=2)


> ensure_ascii работает и в dump, и в dumps. Для чтения (load/loads) не нужен.

Полезные опции:

* indent=2 — красиво форматирует.
* separators=(",", ":") — компактный вывод (без пробелов).
* sort_keys=True — ключи по алфавиту (удобно для диффов).

Загрузка JSON (и разница load/loads)

import json

# load: из файла
with open("data1.json", "r", encoding="utf-8") as f:
obj = json.load(f)

# loads: из строки
s = '{"ok": true, "n": 3}'
obj2 = json.loads(s)


Мини‑обработка ошибок:

try:
json.loads('{"broken": }')
except json.JSONDecodeError as e:
print(f"Ошибка в строке {e.lineno}, столбце {e.colno}: {e.msg}")


Маленькая практика: забрали данные и сохранили красиво

import json, requests

users = requests.get("https://jsonplaceholder.typicode.com/users").json()

# всё в один файл
with open("users.json", "w", encoding="utf-8") as f:
json.dump(users, f, indent=2, ensure_ascii=False)

# каждый пользователь — в отдельный файл
for u in users:
with open(f"user_{u['id']}.json", "w", encoding="utf-8") as f:
json.dump(u, f, indent=2, ensure_ascii=False)


Важно помнить

* datetime, Decimal, свои классы — не сериализуются “из коробки”. Нужен default= или предварительная конвертация.
* Числа с плавающей точкой — это float (осторожно с точностью, если нужны деньги — храните как строки/копейки).

JSON — это must-have навык для любого Python-разработчика: от парсинга и API-запросов до конфигураций и хранения данных.

👍 Сохраняй шпаргалку, пригодится!

#doc #python #cheatsheet
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5217🔥9🤯1