Как динамически строить объект JSON с помощью Python?

Я новичок в Python, и я играю с данными JSON. Я хотел бы динамически построить объект JSON, добавив некоторое значение ключа в существующий объект JSON.

Я попробовал следующее, но получаю TypeError: 'str' object does not support item assignment:

import json

json_data = json.dumps({})
json_data["key"] = "value"

print 'JSON: ', json_data

Ответ 1

Вы создаете объект перед его кодировкой в строку JSON:

import json

data = {}
data['key'] = 'value'
json_data = json.dumps(data)

JSON - это формат сериализации, текстовые данные, представляющие структуру. Это не сама по себе структура.

Ответ 2

Уже есть решение, которое позволяет создавать словарь (или вложенный словарь для более сложных данных), но если вы хотите построить объект, то, возможно, попробуйте "ObjDict". Это дает гораздо больший контроль над созданным json, например, сохраняя порядок и позволяет создавать объект как объект, который может быть предпочтительным представлением вашей концепции.

pip install objdict first.

from objdict import ObjDict

data = ObjDict()
data.key = 'value'
json_data = data.dumps()

Ответ 3

Вы можете создать словарь Python и сериализовать его в JSON в одной строке, и это даже не уродливо.

my_json_string = json.dumps({'key1': val1, 'key2': val2})

Ответ 4

Вы можете использовать библиотеку EasyDict (doc):

EasyDict позволяет получить доступ к значениям dict как атрибутам (работает рекурсивно). Подобные Javascript свойства обозначают точки для Python dicts.

Useage

>>> from easydict import EasyDict as edict
>>> d = edict({'foo':3, 'bar':{'x':1, 'y':2}})
>>> d.foo
3
>>> d.bar.x
1

>>> d = edict(foo=3)
>>> d.foo
3

[ Установка ]:

  • pip install easydict

Ответ 5

Все предыдущие ответы верны, вот еще один и простой способ сделать это. Например, создайте структуру данных Dict для сериализации и десериализации объекта

(Обратите внимание, что в Python None - это NULL, и я намеренно использую это, чтобы продемонстрировать, как вы можете сохранить NULL и преобразовать его в JSON NULL)

import json
print('serialization')
myDictObj = { "name":"John", "age":30, "car":None }
##convert object to json
serialized= json.dumps(myDictObj, sort_keys=True, indent=3)
print(serialized)
## now we are gonna convert json to object
deserialization=json.loads(serialized)
print(deserialization)

enter image description here