Сообщить об ошибке.

Функция dump() модуля json в Python

Запись данных Python в файл JSON

Синтаксис:

import json

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, 
          check_circular=True, allow_nan=True, cls=None,
          indent=None, separators=None, default=None, 
          sort_keys=False, **kw)

Параметры:

  • obj - объект Python,
  • fp - поток в формате JSON,
  • skipkeys=False - игнорирование неизвестных типов ключей в словарях,
  • ensure_ascii=True - экранирование не-ASCII символов,
  • check_circular=True - проверка циклических ссылок,
  • allow_nan=True - представление значений nan, inf, -inf в JSON,
  • cls=None - метод, для сериализации дополнительных типов,
  • indent=None - количество отступов при сериализации,
  • separators=None - разделители используемые в JSON,
  • default=None - пользовательская функция для объектов, которые не могут быть сериализованы,
  • sort_keys=False - сортировка словарей на выходе.

Возвращаемое значение:

  • поток в формате JSON, который записывается методом fp.write().

Описание:

Функция dump() модуля json преобразует объекты obj Python в поток fp в формате JSON, который записывается методом fp.write(). Сериализация объектов Python выполняется согласно таблице преобразования, представленной в описании класса json.JSONEncoder.

Если аргумент skipkeys=True (по умолчанию: False), тогда ключи словаря не являющиеся базовыми типами (str, int, float, bool, None) будут пропущены без вызова исключения TypeError.

Модуль json всегда создает объекты типа str, не bytes. Следовательно, метод fp.write() должен поддерживать тип str.

Когда аргумент ensure_ascii=True, все не-ASCII символы в выводе будут экранированы последовательностями \uXXXX. Если ensure_ascii=False, эти символы будут записаны как есть.

Когда аргумент check_circular=False (по умолчанию: True), тогда проверка циклических ссылок для контейнерных типов будет пропущена, а такие ссылки будут вызывать исключение OverflowError или ошибку серьёзнее.

Если аргумент allow_nan=False (по умолчанию: True), при каждой попытке сериализировать значение float, выходящее за допустимые пределы (nan, inf, -inf), будет возникать исключение ValueError, в соответствии с сертификацией JSON. В случае если allow_nan=True, будут использованы JavaScript аналоги (NaN, Infinity, -Infinity).

Когда аргумент indent является неотрицательным целым числом или строкой, то объекты и массивы JSON будут выводиться с указанным количеством отступов. Если уровень отступа равен 0, отрицательным значением или пустой строкой '', будут использоваться строки без отступов. None (по умолчанию) отражает наиболее компактное представление формата. Если indent - это строка например '\t', то она будет использоваться в качестве отступа.

Аргумент separators должен быть кортежем (item_separator, key_separator). По умолчанию используется значение (', ', ': ') если indent=None и (',', ': ') при другом значении. Чтобы получить наиболее компактное представление JSON, вы должны указать (',', ':').

Аргумент default должен быть функцией. Она вызывается для объектов, которые не могут быть сериализованы. Функция должна вернуть кодируемую версию объекта JSON или вызывать исключение TypeError. Если default не указано, возникает ошибка TypeError.

Если аргумент sort_keys=True (по умолчанию: False), то ключи словарей будут отсортированы.

Чтобы использовать собственный подкласс json.JSONEncoder, например тот который переопределяет метод default() для сериализации дополнительных типов, укажите его с помощью аргумента cls, в противном случае используется json.JSONEncoder.

Примеры использования:

# Данные, которые нужно преобразовать в JSON
# будем складывать в список 'data' 
>>> data = []
>>> a = 'foo'
>>> data.append(a) # добавление в список 'data' 
>>> b = {'bar': ['baz', null, 1.0, 2], 'key': 'value', 10: 'ten'}
>>> data.append(b)
>>> c = [3, 4, 5, 6]
>>> data.append(c)
>>> import json
# Открываем файл на запись
>>> with open('data.json', 'w') as fp:
        # Преобразование объектов Python в данные 
        # JSON формата, а так же запись в файл 'data.json'
...     json.dump(data, fp)
...
# теперь прочитаем записанные данные
>>> with open('data.json', 'r') as fp:
        # Чтение файла 'data.json' и преобразование
        # данных JSON в объекты Python 
...     data = json.load(fp)
...

>>> data[0]
# 'foo'
>>> data[1]['bar']
# ['baz', None, 1.0, 2]
>>> data[1]['10']
# 'ten'
>>> data[2][3]
# 6