2012-10-08 28 views
12

En primer lugar, voy a conceder que soy un poco más que un tipo torpe de artes liberales que es completamente autodidacta en este guión. Dicho esto, yo estoy tratando de obtener valores de un Servicio de Datos USGS agua con el siguiente código:Extraer un solo valor de la respuesta de 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] 

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 a través de la respuesta, puedo ver 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, descubrir cómo extraer estos valores.

¡Gracias por toda ayuda para resolver esto!

+7

¿Puede dar una muestra de la JSON y qué valor se necesita? O un valor para 'gaugeId' que podemos usar. –

+0

Alguien pidió ver la respuesta JSON. Me disculpo por no haberlo incluido originalmente. En lugar de publicar todo (es bastante grande), simplemente siga este enlace: http://waterservices.usgs.gov/nwis/iv/?format=json&sites=01646500¶meterCd=00060,00065. Por lo que puedo decir, estoy buscando valor> tiempoSerie> variable> valor> valor – knu2xs

Respuesta

25

usando json.loads convertirá sus datos en un pitón dictionary.

valores Diccionarios se accede 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 
} 

se traduciría en una dicción pitón

resp_dict = json.loads(resp_str) 

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

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

única sugerencia es para acceder a su resp_dict través .get() para un enfoque más agraciado que degradan 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 podría agregar algo de lógica para probar la llave si así lo desea.

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

Extracto único valor de JSON Python respuesta

Prueba este

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