2012-10-08 22 views
12

Zunächst einmal werde ich frei zugeben, dass ich wenig mehr als ein tollpatschiger Liberal Arts-Typ bin, der in dieser Skript-Sache vollkommen autodidaktisch ist. Das heißt, ich bin versucht, Werte aus einer der USGS Wasser Data Service zu erhalten mit dem Code unten:Einzelwert aus der JSON-Antwort extrahieren 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] 

Obwohl ich einige Tutorials gefunden haben darüber, wie Sie die gewünschten Werte aus einer JSON-Antwort zu extrahieren, die meisten sind recht einfach . Die Schwierigkeit, die ich habe, ist das Extrahieren von etwas, das wie eine sehr komplizierte Antwort aussieht, die dieser Dienst zurückgibt. Wenn ich durch die Antwort schaue, kann ich sehen, was ich möchte, ist der Wert aus zwei verschiedenen Abschnitten und einem Zeitwert. Daher kann ich mir die Antwort ansehen und sehen, was ich brauche. Ich kann einfach nicht für mein Leben herausfinden, wie man diese Werte extrahiert.

Vielen Dank für die Hilfe!

+7

Können Sie eine Probe des json geben und welchen Wert Sie benötigen? Oder ein Wert für "gaugeId", den wir verwenden können. –

+0

Jemand fragte nach der JSON-Antwort. Ich entschuldige mich dafür, dass ich es ursprünglich nicht aufgenommen habe. Anstatt das Ganze zu posten (es ist ziemlich groß), folgen Sie einfach diesem Link: http://waterservices.usgs.gov/nwis/iv/?format=json&sites=01646500¶meterCd=00060,00065. Soweit ich das beurteilen kann, suche ich nach Wert> timeSeries> variable> value> value – knu2xs

Antwort

25

mit json.loads werden Ihre Daten in ein Python dictionary verwandeln.

Wörterbücher Werte zugegriffen ['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 
} 

mit würde

resp_dict = json.loads(resp_str) 

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

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

Nur Vorschlag Ihre resp_dict über .get zuzugreifen ist() für einen anmutigen Ansatz in eine Python-Diktion übersetzen, die degradieren gut, wenn die Daten nicht wie erwartet sind.

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

Sie können auch eine Logik hinzufügen, um den Schlüssel zu testen, wenn Sie möchten.

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

Extract einzigen Wert von JSON-Antwort Python

Versuchen Sie, diese

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']) 
Verwandte Themen