2013-06-01 5 views

risposta

119

È possibile utilizzare json.loads:

import json 
import requests 

response = requests.get(...) 
json_data = json.loads(response.text) 

Questo trasforma una data stringa in un dizionario che permette di accedere ai dati JSON facilmente all'interno del codice.

+1

ok bene, tuttavia ognuno degli elementi sarebbe ancora unicode. – felix001

+0

@ felix001: sì, anche se è possibile convertire qualsiasi dato usando 'str()'. D'altra parte i dati Unicode non sono male da avere in giro (in preparazione per il futuro). –

+52

Molto, molto meglio usare 'response.json()', dato che farà un * lavoro * migliore per capire la codifica usata. (Disclaimer, ho scritto un po 'di quel codice). –

185

Se si utilizzano le richieste, è necessario utilizzare il metodo json della risposta. È guesses which UTF encoding was used if no encoding was specified e uses the simplejson package if it is installed.

import requests 

response = requests.get(...) 
data = response.json() 
+1

Ricorda che è apparso da qualche parte tra v0.12 e v1.0 così che per esempio Ubuntu 12.04 deb-package per python-requests non ha ancora questa funzione (è v0.8). Si può 'pip installare le richieste', invece di usare il pacchetto deb. – timurb

+0

Sono un po 'curioso cosa sia ora 'data' è una lista di liste o un dizionario. –

+2

@Krishna_Oza 'data' rispecchia la struttura del JSON che sta leggendo. Ad esempio, se la risposta è: '[{" a ": {...}}]', 'data' è una lista, con' lista [0] == {'a': {...}} '. Se la risposta è '{" a ":" b "," c ":" d "}', 'data' è un dict. Questo risponde alla tua domanda? – pswaminathan

2

ad analizzare una risposta come quella qui sotto

{ 
    one: { 
     two: { 
      three: "Hello, friend!", 
     } 
    } 
} 

possiamo fare qualcosa di simile

ParsedValue = data['one']['two']['three'] 
print ParsedValue 

Buona fortuna!

+0

Questo mostra come iterare attraverso il valore già analizzato, ma non mostra come analizzarlo da una stringa a JSON, che è ciò che la domanda sta chiedendo. –

-1
**#  This code helping to get data or individual fields from url like api url** 
#Get for single field from url 
import requests 
import json 
import urllib 

url="http://api.open-notify.org/iss-pass.json" 
r=requests.get(url) 
t=json.loads(r.content) 
for i in range(len(t)): 
#There is state is field of database 
    print(t[i]['state']) 
+2

Le risposte solo in codice sono scoraggiate. Modifica la tua risposta e spiega la tua soluzione. –

+0

... e anche, forse, in che modo si differenzia materialmente dalle risposte precedenti: questo sembra incoraggiare le pratiche più sinteticamente descritte nella [risposta corrente accettata] (https://stackoverflow.com/a/16877439/14122) , che è materialmente peggiore della [risposta attualmente votata in alto] (https://stackoverflow.com/a/16877561/14122), che sfrutta il supporto di decodifica JSON incorporato più contestuale e consapevole della libreria 'request'. –