web-dev-qa-db-ja.com

Pythonで辞書をJSONに変換する

r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
file.write(str(r['rating']))

JSONで自分のデータにアクセスすることができません。何がおかしいのですか?

TypeError: string indices must be integers, not str
219
sheetal_158

json.dumps()は辞書をjson(dict)オブジェクトではなくstrオブジェクトに変換します。そのため、 json.loads() methodを使用してstrをdictにロードして使用する必要があります。

Saveメソッドとしてのjson.dumps()およびretrieveメソッドとしてのjson.loads()を参照してください。

これは理解を深めるのに役立つコードサンプルです。

import json

r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
loaded_r = json.loads(r)
loaded_r['rating'] #Output 3.5
type(r) #Output str
type(loaded_r) #Output dict
362
Iman Mirzadeh

json.dumps()はPython辞書のJSON文字列表現を返します。 ドキュメントを参照してください

Rはもはや辞書ではなく、文字列なのでr['rating']はできません

おそらくあなたは以下のようなものを意味しました

r = {'is_claimed': 'True', 'rating': 3.5}
json = json.dumps(r) # note i gave it a different name
file.write(str(r['rating']))
29
Tim Castelijns

json.dumps()を使って文字列に変換する必要はありません。

r = {'is_claimed': 'True', 'rating': 3.5}
file.write(r['is_claimed'])
file.write(str(r['rating']))

あなたは辞書オブジェクトから直接値を得ることができます。

2
user3273866

Rを辞書として定義すると、うまくいくはずです。

>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>
0
Aslan