web-dev-qa-db-ja.com

TypeError:JSONオブジェクトは 'dict'ではなくstrでなければなりません

申し訳ありませんが、json応答の一部を印刷するための満足のいく答えが見つかりませんでした。誰かここで私を助けてもらえますか:

import json
import requests
import pprint 

response = requests.get('<api endpoing>')
json_data = response.json()
print(json.dumps(json_data, indent=4, sort_keys=True))

JSON応答は

{
    "Value1": "SomeValue",
    "data": {
        "subval1": false,
        "subval2": "0a4",
        "subval3": "",
        "subval4": "Click h!",
        "subval5": "1002",
        "subval6": "932",
        "subval7": "i2",
        "subval8": 250,
        "subval9": 0,
        "subval10": 1,
        "subval11": 3,
        "subval12": 1,
        "subval13": "<!>",
        "subval14": "",
        "subval15": "Click !!",
        "subval16": "",
        "subval17": 300
    },
    "error": true,
    "message": "Success",
    "status": 200
}

ここで、「データ」値のみを走査して印刷したいと思います。私は次のことをします

data = json.loads(json_data)
data_set = (data['data'])
print(data_set)

しかし、エラーは取得しています:TypeError:JSONオブジェクトは 'dict'ではなくstrでなければなりません

9
Manoj Kengudelu

既にpython dictであるため、json.loads(json_data)する必要はありません。このdictを直接出力する必要があります。そして、dictからのjson文字列の出力はjson.dumps()の仕事:

json.dumps(json_data["data"])
17
n00dl3

実際にjson()メソッドはjsonオブジェクトを返すので、json.loadsを使用する必要はありません

または、使用できます

r=requests.get("")
print json.loads(r.content)

JSON Response Content の詳細を参照してください。

0
McGrady