it-swarm.com.ru

Как динамически построить объект 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
209
Backo

Вы строите объект перед, кодируя его в строку JSON:

import json

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

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

431
Martijn Pieters

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

сначала установите pip-объект.

from objdict import ObjDict

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

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

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

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

EasyDict позволяет получать значения dict как атрибуты (работает рекурсивно). Точечная нотация свойств, подобная Javascript, для диктовок python.

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
8
Benyamin Jafari

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

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

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

2
grepit