web-dev-qa-db-fra.com

Comment construire dynamiquement un objet JSON avec Python?

Je suis nouveau sur Python et je joue avec les données JSON. Je souhaite créer dynamiquement un objet JSON en ajoutant une valeur-clé à un objet JSON existant.

J'ai essayé ce qui suit mais j'obtiens TypeError: 'str' object does not support item assignment:

import json

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

print 'JSON: ', json_data
209
Backo

Vous construisez l'objet before en le codant en chaîne JSON:

import json

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

JSON est un format de sérialisation, des données textuelles représentant une structure. Ce n'est pas elle-même cette structure.

431
Martijn Pieters

Il existe déjà une solution qui permet de créer un dictionnaire (ou un dictionnaire imbriqué pour des données plus complexes), mais si vous souhaitez créer un objet, essayez peut-être "ObjDict". Cela donne beaucoup plus de contrôle sur le JSON à créer, par exemple en conservant l'ordre, et permet de construire en tant qu'objet qui peut être une représentation préférée de votre concept.

pip installer objdict en premier.

from objdict import ObjDict

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

Vous pouvez créer le dictionnaire Python et le sérialiser au format JSON en une seule ligne et ce n’est même pas moche.

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

Vous pouvez utiliser la bibliothèque EasyDict ( doc ):

EasyDict permet d'accéder aux valeurs dict en tant qu'attributs (fonctionne de manière récursive). Une notation de points semblable aux propriétés javascript pour les dessins python.

UTILISATION

>>> 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

[ Installation ]:

  • pip install easydict
8
Benyamin Jafari

Toutes les réponses précédentes sont correctes, voici un moyen simple et supplémentaire de le faire. Par exemple, créer une structure de données Dict pour sérialiser et désérialiser un objet

( Avis None est Null en python et je l'utilise intentionnellement pour montrer comment vous pouvez stocker null et le convertir en 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

2
grepit