辞書をJSONに変換する


347
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

回答:


536

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

json.dumps()保存メソッドおよび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

11
jsonを別の変数にロードするのは、loaded_rすでに持っていることを考えると、少し非効率だと思いませんrか?
Tim

こんにちは!これは非常に古い答えだと思いますが、1つクリアしてほしいと思っていました。@TimCastelijnsは、jsonを新しい変数loaded_rにロードするのは非効率的であると述べました。これを行う効率的な方法は、単にr = json.loads(r)と記述することでしょうか?
SchrodingersStat

2
@SchrodingersStatこんにちは。これによってパフォーマンスが大きく変わるとは思わない。'timeit'関数を使用して確認できます。本当に高速なjsonロード/ダンプが必要な場合は、「ujson」ライブラリを使用できます。
イマンミルザデー

14
@TimCastelijnsがイムランの意図を誤解しているのではないかと思います。新しい変数に読み込まれるのは、JSONが新しい情報であるからではなく、新しい辞書の値、つまりJSONエンコードとデコードの往復の後の値が同じであることを示すためです。
dumbledad

43

json.dumps()Python dictのJSON文字列表現を返します。ドキュメントを見る

r['rating']rは文字列であり、dictではないため、実行できません

おそらくあなたは何かのような意味でした

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

2

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

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

dictオブジェクトから直接値を取得できます。


0

rを辞書として定義することは、トリックを行うべきです:

>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.