web-dev-qa-db-ja.com

PythonでJSONオブジェクトを動的に構築する方法

私はPythonの初心者で、JSONデータで遊んでいます。既存のJSONオブジェクトにKey-Valueを追加して、JSONオブジェクトを動的に構築したいと思います。

私は以下を試しましたが、私はTypeError: 'str' object does not support item assignmentを得ます:

import json

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

print 'JSON: ', json_data
201
Backo

オブジェクト before を作成してJSON文字列にエンコードします。

import json

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

JSONは シリアライゼーション 形式、テキストデータ を表す 構造体です。それ自体はその構造ではありません。

420
Martijn Pieters

ディクショナリー(またはより複雑なデータ用のネストされたディクショナリー)を作成することを可能にする解決策はすでに提供されていますが、オブジェクトを作成したい場合は、おそらく 'ObjDict'を試してください。これにより、作成するJSONをはるかに制御できるようになります(順序の保持など)。また、オブジェクトとして構築することで、自分の概念を優先的に表現することができます。

最初にobjdictをインストールします。

from objdict import ObjDict

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

Python辞書を作成して1行でJSONにシリアル化することができますが、それほど見苦しくありません。

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

EasyDictライブラリを使うことができます doc

EasyDictは属性として辞書値にアクセスすることを可能にします(再帰的に働きます)。 Javascript風のプロパティは、Python辞書用のドット表記です。

使用方法

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

これまでの答えはすべて正解です。ここにもう1つ簡単な方法があります。例えば、オブジェクトをシリアライズおよびデシリアライズするDictデータ構造を作成します。

Notice NoneはPythonでは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

2
grepit