¿Cómo construir dinámicamente un objeto JSON con Python?
Soy nuevo en Python y estoy jugando con datos JSON. Me gustaría construir dinámicamente un objeto JSON agregando algún valor clave a un objeto JSON existente.
Probé lo siguiente pero obtengo TypeError: 'str' object does not support item assignment
:
import json
json_data = json.dumps({})
json_data["key"] = "value"
print 'JSON: ', json_data
5 answers
Construyes el objeto antes de codificándolo en una cadena JSON:
import json
data = {}
data['key'] = 'value'
json_data = json.dumps(data)
JSON es un formato de serialización , datos textualesque representan una estructura. No es, en sí misma, esa estructura.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-09 02:14:40
Ya hay una solución provista que permite construir un diccionario, (o diccionario anidado para datos más complejos), pero si desea construir un objeto, entonces tal vez intente 'ObjDict'. Esto le da mucho más control sobre el json a crear, por ejemplo conservando el orden, y permite construir como un objeto que puede ser una representación preferida de su concepto.
Pip instala objict primero.
from objdict import ObjDict
data = ObjDict()
data.key = 'value'
json_data = data.dumps()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-02 01:51:31
Puedes crear el diccionario Python y serializarlo a JSON en una línea y ni siquiera es feo.
my_json_string = json.dumps({'key1': val1, 'key2': val2})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-01 14:27:22
Puede usar EasyDict (doc):
EasyDict permite acceder a valores dict como atributos (funciona recursivamente). Notación de puntos de propiedades similares a Javascript para los dictados de Python.
USO
>>> 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-12 22:04:16
Todas las respuestas anteriores son correctas, aquí hay una forma más y fácil de hacerlo. Por ejemplo, cree una estructura de datos Dict para serializar y deserializar un objeto
(Notice None es Null en python y estoy usando esto intencionalmente para demostrar cómo puede almacenar null y convertirlo en json null)
import json
print('serialization')
myDictObj = { "name":"John", "age":30, "car":None }
##convert object to json
serilaized= json.dumps(myDictObj, sort_keys=True, indent=3)
print(serilaized)
## now we are gonna convert json to object
deserialization=json.loads(serilaized)
print(deserialization)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-03 16:54:27