ZEN_OF_PYTHON Telegram 4545
Что такое JSON и зачем он нужен

JSON (JavaScript Object Notation) — текстовый формат для обмена данными, удобный для людей и машин. Он возник в экосистеме JavaScript, но стал язык-независимым стандартом для API, конфигураций и документных хранилищ. Формат простой: объекты (пар «ключ: значение») и массивы — это основные строительные блоки.

Почему Python-разработчику это важно:

🔘 JSON часто используется в web-API, логах, конфигурациях и при обмене данными между сервисами.
🔘 Python имеет встроенный модуль json, который делает сериализует (Python → JSON) и десериализует (JSON → Python).


Синтаксис JSON

🔘 Строки — в двойных кавычках ("...");
🔘 Логические значения — в нижнем регистре: true / false (в Python — True / False);
🔘 Отсутствующее значение — null (в Python → None);
🔘 Нельзя оставлять комментарии и нельзя ставить завершающие запятые после последнего элемента.

Валидный JSON:


{
"name": "Frieda",
"isDog": true,
"hobbies": ["eating", "sleeping"],
"age": 8,
"address": {"home": ["Berlin", "Germany"], "work": null}
}



Модуль json

Главные функции одноименного модуля стандартной библиотеки:

🔘 json.dumps(obj, **opts) — сериализует Python-объект в строку JSON;
🔘 json.dump(obj, fp, **opts) — сериализует и записывает в файл-объект;
🔘 json.loads(s) — парсит JSON-строку в Python-объект;
🔘 json.load(fp) — считывает JSON из файла и парсит.

Эти функции следуют стандартному отображению типов: словари → объекты, списки → массивы, строки → строки, числа → числа, True / Falsetrue / false, Nonenull.


import json

data = {"name": "Frieda", "age": 8, "is_dog": True}
s = json.dumps(data) # --> '{"name": "Frieda", "age": 8, "is_dog": true}'
obj = json.loads(s) # --> {'name': 'Frieda', 'age': 8, 'is_dog': True}



Полезные параметры dumps / dump

При сериализации полезны параметры:

🔘 indent — делает вывод читабельным (pretty print) (например, indent=2);
🔘 sort_keys=True — сортирует ключи объекта по алфавиту;
🔘 separators — позволяет контролировать символы между элементами (полезно для минификации);
🔘 ensure_ascii=False — по умолчанию json экранирует не-ASCII символы; если хотите сохранить UTF-8 в читаемом виде, ставьте False;
🔘 skipkeys=True — пропускает неподдерживаемые типы ключей вместо TypeError (использовать осторожно — вы можете потерять данные).


Маппинг типов

При загрузке JSON в Python выполняется обратное отображение типов:

* objectdict
* arraylist
* stringstr
* numberint / float
* true`/`falseTrue`/`False
* nullNone

JSON-ключи — всегда строки. Если у вас в исходном Python-словаре были числовые ключи (например {1: "a"}`), при сериализации они станут строками (`"1"`). После `json.loads() вы получите ключи как строки — Python не "угадает" исходный тип. Это частая ловушка при конвертации словарей ключами-числами.


Полезные утилиты и приёмы

🔘 python -m json.tool — встроенная утилита для форматирования/проверки JSON в терминале (можно использовать для prettify/minify);
🔘 Онлайн-валидаторы (например, JSONLint) и редакторы с подсветкой помогут быстро найти синтаксические ошибки (комментарии, лишние запятые и т. п.).


Подборка примеров

Читаем JSON из файла:

import json

with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)


Записываем с красивым форматированием:

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


Сериализуем datetime:

from datetime import datetime
import json

def default(o):
if isinstance(o, datetime):
return o.isoformat()
raise TypeError

json.dumps({"now": datetime.utcnow()}, default=default)


Проверяем валидность JSON в CLI

python -m json.tool input.json > /dev/null
# код возврата 0 — валидный JSON


#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
10



tgoop.com/zen_of_python/4545
Create:
Last Update:

Что такое JSON и зачем он нужен

JSON (JavaScript Object Notation) — текстовый формат для обмена данными, удобный для людей и машин. Он возник в экосистеме JavaScript, но стал язык-независимым стандартом для API, конфигураций и документных хранилищ. Формат простой: объекты (пар «ключ: значение») и массивы — это основные строительные блоки.

Почему Python-разработчику это важно:

🔘 JSON часто используется в web-API, логах, конфигурациях и при обмене данными между сервисами.
🔘 Python имеет встроенный модуль json, который делает сериализует (Python → JSON) и десериализует (JSON → Python).


Синтаксис JSON

🔘 Строки — в двойных кавычках ("...");
🔘 Логические значения — в нижнем регистре: true / false (в Python — True / False);
🔘 Отсутствующее значение — null (в Python → None);
🔘 Нельзя оставлять комментарии и нельзя ставить завершающие запятые после последнего элемента.

Валидный JSON:


{
"name": "Frieda",
"isDog": true,
"hobbies": ["eating", "sleeping"],
"age": 8,
"address": {"home": ["Berlin", "Germany"], "work": null}
}



Модуль json

Главные функции одноименного модуля стандартной библиотеки:

🔘 json.dumps(obj, **opts) — сериализует Python-объект в строку JSON;
🔘 json.dump(obj, fp, **opts) — сериализует и записывает в файл-объект;
🔘 json.loads(s) — парсит JSON-строку в Python-объект;
🔘 json.load(fp) — считывает JSON из файла и парсит.

Эти функции следуют стандартному отображению типов: словари → объекты, списки → массивы, строки → строки, числа → числа, True / Falsetrue / false, Nonenull.


import json

data = {"name": "Frieda", "age": 8, "is_dog": True}
s = json.dumps(data) # --> '{"name": "Frieda", "age": 8, "is_dog": true}'
obj = json.loads(s) # --> {'name': 'Frieda', 'age': 8, 'is_dog': True}



Полезные параметры dumps / dump

При сериализации полезны параметры:

🔘 indent — делает вывод читабельным (pretty print) (например, indent=2);
🔘 sort_keys=True — сортирует ключи объекта по алфавиту;
🔘 separators — позволяет контролировать символы между элементами (полезно для минификации);
🔘 ensure_ascii=False — по умолчанию json экранирует не-ASCII символы; если хотите сохранить UTF-8 в читаемом виде, ставьте False;
🔘 skipkeys=True — пропускает неподдерживаемые типы ключей вместо TypeError (использовать осторожно — вы можете потерять данные).


Маппинг типов

При загрузке JSON в Python выполняется обратное отображение типов:

* objectdict
* arraylist
* stringstr
* numberint / float
* true`/`falseTrue`/`False
* nullNone

JSON-ключи — всегда строки. Если у вас в исходном Python-словаре были числовые ключи (например {1: "a"}`), при сериализации они станут строками (`"1"`). После `json.loads() вы получите ключи как строки — Python не "угадает" исходный тип. Это частая ловушка при конвертации словарей ключами-числами.


Полезные утилиты и приёмы

🔘 python -m json.tool — встроенная утилита для форматирования/проверки JSON в терминале (можно использовать для prettify/minify);
🔘 Онлайн-валидаторы (например, JSONLint) и редакторы с подсветкой помогут быстро найти синтаксические ошибки (комментарии, лишние запятые и т. п.).


Подборка примеров

Читаем JSON из файла:

import json

with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)


Записываем с красивым форматированием:

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


Сериализуем datetime:

from datetime import datetime
import json

def default(o):
if isinstance(o, datetime):
return o.isoformat()
raise TypeError

json.dumps({"now": datetime.utcnow()}, default=default)


Проверяем валидность JSON в CLI

python -m json.tool input.json > /dev/null
# код возврата 0 — валидный JSON


#основы
@zen_of_python

BY Zen of Python


Share with your friend now:
tgoop.com/zen_of_python/4545

View MORE
Open in Telegram


Telegram News

Date: |

“[The defendant] could not shift his criminal liability,” Hui said. While some crypto traders move toward screaming as a coping mechanism, many mental health experts have argued that “scream therapy” is pseudoscience. Scientific research or no, it obviously feels good. Developing social channels based on exchanging a single message isn’t exactly new, of course. Back in 2014, the “Yo” app was launched with the sole purpose of enabling users to send each other the greeting “Yo.” To edit your name or bio, click the Menu icon and select “Manage Channel.” 5Telegram Channel avatar size/dimensions
from us


Telegram Zen of Python
FROM American