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
- сортировка словарей на выходе.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