¿Cómo extraer un solo valor de la respuesta JSON?

En primer lugar, admitiré libremente que soy poco más que un torpe hombre de artes liberales que es completamente autodidacta en este asunto de los scripts. Dicho esto, estoy intentando obtener valores del Servicio de Datos del Agua de USGS utilizando el siguiente código:

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] 

Aunque he encontrado algunos tutoriales sobre cómo extraer los valores deseados de una respuesta JSON, la mayoría son bastante simples. La dificultad que tengo es extraer de lo que parece ser una respuesta muy complicada que este servicio está devolviendo. Mirando la respuesta, puedo ver que lo que quiero es el valor de dos secciones diferentes y un valor de tiempo. Por lo tanto, puedo ver la respuesta y ver lo que necesito, simplemente no puedo, por mi vida, averiguar cómo obtener estos valores extraídos.

el uso de json.loads convertirá sus datos en un diccionario de Python.

Se accede a los valores de los diccionarios usando ['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 } 

se traduciría en una dicción python

 resp_dict = json.loads(resp_str) resp_dict['name'] # "ns1:timeSeriesResponseType" resp_dict['value']['queryInfo']['creationTime'] # 1349724919000 

La única sugerencia es acceder a su resp_dict través de .get() para un enfoque más elegante que se degradará bien si los datos no son los esperados.

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

También puede agregar algo de lógica para probar la clave si así lo desea.

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

Extraer valor único de la respuesta JSON Python

Prueba esto

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