web-dev-qa-db-fra.com

TypeError: l'objet JSON doit être str, pas 'dict'

Désolé les gars, je n'ai pas pu trouver la réponse satisfaisante pour imprimer une partie de la réponse JSON. Quelqu'un peut m'aider ici s'il vous plaît:

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 réponse serait 

{
    "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
}

Maintenant, je voudrais parcourir et imprimer uniquement les "données": valeurs. Je ferai ce qui suit 

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

Mais l'erreur im obtenir: TypeError: l'objet JSON doit être str, pas 'dict'

7
Manoj Kengudelu

Vous n'avez pas besoin de json.loads(json_data) car c'est déjà un dict python, il vous suffit de le sortir directement. Et produire une chaîne json à partir d’un dict est le travail de json.dumps():

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

En fait, la méthode json() renvoie un objet json, vous n'avez donc pas besoin d'utiliser json.loads

Ou vous pouvez utiliser

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

Voir plus de détails dans Contenu de la réponse JSON .

0
McGrady