JSON

json_obj = json.load(json_file)  # з файла
json_obj = json.loads(json_str)  # з рядка

with open('sw_templates.json', 'w') as json_file:
    json.dump(json_obj, json_file)  # у файл
json_str = json.dumps(json_obj, separators=(',',':'))  # у рядок

JSON (JavaScript Object Notation) – це текстовий формат для зберігання та обміну даними.

Читання

Файл sw_templates.json:

Для чтения в модуле json есть два метода:

  • json.load - метод считывает файл в формате JSON и возвращает объекты Python

  • json.loads - метод считывает строку в формате JSON и возвращает объекты Python

json.load (з файлу)

Чтение файла в формате JSON в объект Python (файл json_read_load.py):

Вывод будет таким:

json.loads (з рядка)

Считывание строки в формате JSON в объект Python (файл json_read_loads.py):

Результат будет аналогичен предыдущему выводу.

Запис

Запись файла в формате JSON также осуществляется достаточно легко.

Для записи информации в формате JSON в модуле json также два метода:

  • json.dump - метод записывает объект Python в файл в формате JSON

  • json.dumps - метод возвращает строку в формате JSON

json.dumps (в рядок)

Преобразование объекта в строку в формате JSON (json_write_dumps.py):

Метод json.dumps подходит для ситуаций, когда надо вернуть строку в формате JSON. Например, чтобы передать ее API.

json.dump (у файл)

Запись объекта Python в файл в формате JSON (файл json_write_dump.py):

Когда нужно записать информацию в формате JSON в файл, лучше использовать метод dump.

Додаткові параметри методів запису

Методам dump и dumps можно передавать дополнительные параметры для управления форматом вывода.

По умолчанию эти методы записывают информацию в компактном представлении. Как правило, когда данные используются другими программами, визуальное представление данных не важно. Если же данные в файле нужно будет считать человеку, такой формат не очень удобно воспринимать.

К счастью, модуль json позволяет управлять подобными вещами.

Передав дополнительные параметры методу dump (или методу dumps), можно получить более удобный для чтения вывод (файл json_write_indent.py):

Теперь содержимое файла sw_templates.json выглядит так:

Изменение типа данных

Еще один важный аспект преобразования данных в формат JSON: данные не всегда будут того же типа, что исходные данные в Python.

Например, кортежи при записи в JSON превращаются в списки:

Так происходит из-за того, что в JSON используются другие типы данных и не для всех типов данных Python есть соответствия.

Таблица конвертации данных Python в JSON:

Python

JSON

dict

object

list, tuple

array

str

string

int, float

number

True

true

False

false

None

null

Таблица конвертации JSON в данные Python:

JSON

Python

object

dict

array

list

string

str

number (int)

int

number (real)

float

true

True

false

False

null

None

Ограничение по типам данных

В формат JSON нельзя записать словарь, у которого ключи - кортежи:

С помощью дополнительного параметра можно игнорировать подобные ключи:

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

Last updated