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

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

Синтаксис:

import json

json.JSONEncoder(*, skipkeys=False, ensure_ascii=True, 
              check_circular=True, allow_nan=True, 
              sort_keys=False, indent=None, 
              separators=None, default=None)

Параметры:

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

Описание:

Функция JSONEncoder() модуля json расширяет возможности преобразование структур данных Python в формат JSON.

Поддерживает следующие объекты и типы по умолчанию:

PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
Truetrue
Falsefalse
Nonenull

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

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

Если аргумент sure_ascii имеет значение True (по умолчанию), на выходе гарантированно все входящие не ASCII символы будут экранированы последовательностями \uXXXX. Если sure_ascii имеет значение False, то не ASCII символы будут выводиться как есть.

Если аргумент check_circular=True (по умолчанию), тогда списки, словари и самостоятельно закодированные объекты будут проверяться на циклические ссылки во время кодировки, чтобы предотвратить бесконечную рекурсию, что может вызвать исключение OverflowError. В другом случае, такая проверка не выполняется.

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

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

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

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

Значение default должно быть методом подкласса JSONEncoder. Он вызывается для объектов, которые не могут быть сериализованы. Метод должен вернуть кодируемую версию объекта JSON или вызывать исключение TypeError. Если аргумент default не указан и какой-то из объектов не может быть преобразован в JSON, то возникает ошибка TypeError.

Методы класса JSONEncoder().

default(obj):

Реализует метод в подклассе JSONEncoder так, чтобы он возвращал сериализуемый объект для obj или вызывал базовую реализацию.

Например, чтобы поддерживать произвольные итераторы, вы можете реализовать метод default() следующим образом:

def default(self, obj):
   try:
       iterable = iter(obj)
   except TypeError:
       pass
   else:
       return list(iterable)
   # базовый класс вызывает исключение TypeError
   return json.JSONEncoder.default(self, obj)
encode(obj):

Возвращает строковое представление JSON структуры данных Python.

>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
# '{"foo": ["bar", "baz"]}'
iterencode(o):

Преобразовывает переданный объект o и выдаёт каждое строковое представление, как только оно становится доступным. Например:

for chunk in json.JSONEncoder().iterencode(bigobject):
    mysocket.write(chunk)

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

>>> import json
>>> class ComplexEncoder(json.JSONEncoder):
...     def default(self, obj):
...         if isinstance(obj, complex):
...             return [obj.real, obj.imag]
...         # Let the base class default method raise the TypeError
...         return json.JSONEncoder.default(self, obj)
...
>>> json.dumps(2 + 1j, cls=ComplexEncoder)
# '[2.0, 1.0]'
>>> ComplexEncoder().encode(2 + 1j)
# '[2.0, 1.0]'
>>> list(ComplexEncoder().iterencode(2 + 1j))
# ['[2.0', ', 1.0', ']']