Исключить пустые / нулевые значения из сериализации JSON

Я сериализую несколько вложенных словарей в JSON, используя Python с simplejson.

Есть ли способ автоматического исключения пустых / нулевых значений?

Например, сериализуйте это:

{ "dict1" : { "key1" : "value1", "key2" : None } } 

в

  { "dict1" : { "key1" : "value1" } } 

При использовании Jackson с Java вы можете использовать Inclusion.NON_NULL для этого. Существует ли простой эквивалент?

3 Solutions collect form web for “Исключить пустые / нулевые значения из сериализации JSON”

 def del_none(d): """ Delete keys with the value ``None`` in a dictionary, recursively. This alters the input so you may wish to ``copy`` the dict first. """ # For Python 3, write `list(d.items())`; `d.items()` won't work # For Python 2, write `d.items()`; `d.iteritems()` won't work for key, value in list(d.items()): if value is None: del d[key] elif isinstance(value, dict): del_none(value) return d # For convenience 

Использование образца:

 >>> mydict = {'dict1': {'key1': 'value1', 'key2': None}} >>> print(del_none(mydict.copy())) {'dict1': {'key1': 'value1'}} 

Тогда вы можете передать это json .

 >>> def cleandict(d): ... if not isinstance(d, dict): ... return d ... return dict((k,cleandict(v)) for k,v in d.iteritems() if v is not None) ... >>> mydict = dict(dict1=dict(key1='value1', key2=None)) >>> print cleandict(mydict) {'dict1': {'key1': 'value1'}} >>> 

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

 def excludeNone(d): for k in list(d): if k in d: if type(d[k]) == dict: excludeNone(d[k]) if not d[k]: del d[k] 
  • Установка пакетов python на OpenShift
  • python simpleJSONDecoder и сложная проблема JSON
  • Чтение JSON из SimpleHTTPServer
  • Декодирование json и Iterate через элементы в шаблоне django
  • simplejson возвращает значения не в порядке
  • Как решить ImportError: невозможно импортировать имя simplejson в Django
  • Json dumping a dict дает TypeError: ключи должны быть строкой
  • Массив SimpleJSON и NumPy
  • Как сделать simplejson сериализуемым классом
  • Проверьте, существует ли JSON (свойство объекта) и печатается в виде декодирования в формате Unicode
  • Получение значений из JSON с использованием Python
  • Python - лучший язык программирования в мире.