2012-10-08 11 views
12

Prima di tutto, concederò liberamente di essere poco più di un maldestro ragazzo delle arti liberali che è completamente autodidatta in questa scrittura. Detto questo, io sto cercando di ottenere i valori da un servizio dati USGS acqua usando il codice seguente:Estrai un singolo valore dalla risposta JSON Python

def main(gaugeId): 

    # import modules 
    import urllib2, json 

    # create string 
    url = "http://waterservices.usgs.gov/nwis/iv/?format=json&sites=" + gaugeId + "&parameterCd=00060,00065" 

    # open connection to url 
    urlFile = urllib2.urlopen(url) 

    # load into local JSON list 
    jsonList = json.load(urlFile) 

    # extract and return 
    # how to get cfs, ft, and zulu time? 
    return [cfs, ft, time] 

Anche se ho trovato alcuni tutorial su come estrarre i valori desiderati da una risposta JSON, la maggior parte sono abbastanza semplici . La difficoltà che sto avendo sta estraendo da quella che sembra una risposta molto complicata che questo servizio sta restituendo. Guardando attraverso la risposta, posso vedere quello che voglio è il valore di due diverse sezioni e un valore temporale. Quindi, posso guardare la risposta e vedere cosa ho bisogno, non posso, per la vita di me, capire come ottenere questi valori estratti.

Grazie a tutti per l'assistenza necessaria a capirlo!

+7

può dare un campione del JSON e quale valore avete bisogno? O un valore per 'gaugeId' che possiamo usare. –

+0

Qualcuno ha chiesto di vedere la risposta JSON. Mi scuso per non averlo incluso originariamente. Piuttosto che postare l'intera cosa (è piuttosto grande), basta seguire questo link: http://waterservices.usgs.gov/nwis/iv/?format=json&sites=01646500¶meterCd=00060,00065. Da quello che posso dire, sto cercando valore> timeSeries> variabile> valore> valore – knu2xs

risposta

25

utilizzando json.loads trasformerà i dati in python dictionary.

valori Dizionari vengono visualizzate mediante ['key']

resp_str = { 
    "name" : "ns1:timeSeriesResponseType", 
    "declaredType" : "org.cuahsi.waterml.TimeSeriesResponseType", 
    "scope" : "javax.xml.bind.JAXBElement$GlobalScope", 
    "value" : { 
    "queryInfo" : { 
     "creationTime" : 1349724919000, 
     "queryURL" : "http://waterservices.usgs.gov/nwis/iv/", 
     "criteria" : { 
     "locationParam" : "[ALL:103232434]", 
     "variableParam" : "[00060, 00065]" 
     }, 
     "note" : [ { 
     "value" : "[ALL:103232434]", 
     "title" : "filter:sites" 
     }, { 
     "value" : "[mode=LATEST, modifiedSince=null]", 
     "title" : "filter:timeRange" 
     }, { 
     "value" : "sdas01", 
     "title" : "server" 
     } ] 
    } 
    }, 
    "nil" : false, 
    "globalScope" : true, 
    "typeSubstituted" : false 
} 

si tradurrebbe in una dizione pitone

resp_dict = json.loads(resp_str) 

resp_dict['name'] # "ns1:timeSeriesResponseType" 

resp_dict['value']['queryInfo']['creationTime'] # 1349724919000 
4

Solo suggerimento è quello di accedere al resp_dict via .get() per un approccio più aggraziata che si degradano bene se i dati non sono come previsto.

resp_dict = json.loads(resp_str) 
resp_dict.get('name') # will return None if 'name' doesn't exist 

Si potrebbe anche aggiungere un po 'di logica per testare la chiave, se lo si desidera.

if 'name' in resp_dict: 
    resp.dict['name'] 
else: 
    # do something else here. 
1

estrarre valore singolo da JSON risposta Python

Prova questa

import json 
import sys 

#load the data into an element 
data={"test1" : "1", "test2" : "2", "test3" : "3"} 

#dumps the json object into an element 
json_str = json.dumps(data) 

#load the json to a string 
resp = json.loads(json_str) 

#print the resp 
print (resp) 

#extract an element in the response 
print (resp['test1'])