Извлечь одно значение из ответа JSON Python
Во-первых, я буду свободно соглашаться на то, чтобы быть немного больше, чем неуклюжий парень гуманитарных наук, который полностью самоучится в этом сценарии. Тем не менее, я пытаюсь получить значения из USGS Water Data Service, используя следующий код:
def main(gaugeId):
# import modules
import urllib2, json
# create string
url = "http://waterservices.usgs.gov/nwis/iv/?format=json&sites=" + gaugeId + "¶meterCd=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]
Хотя я нашел несколько руководств относительно того, как извлекать нужные значения из ответа JSON, большинство из них довольно просты. Трудность, с которой я сталкиваюсь, заключается в извлечении из того, что выглядит как очень сложный ответ, возвращаемый этой службой. Просматривая ответ, я вижу, что я хочу, это значение из двух разных разделов и значение времени. Следовательно, я могу посмотреть на ответ и посмотреть, что мне нужно, я просто не могу, для жизни меня, выяснить, как извлечь эти значения.
Спасибо за любую помощь в этом!
Ответы
Ответ 1
с помощью json.loads
превратит ваши данные в словарь python.
Доступ к словарям осуществляется с помощью ['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
}
переводится в диктофон python
resp_dict = json.loads(resp_str)
resp_dict['name'] # "ns1:timeSeriesResponseType"
resp_dict['value']['queryInfo']['creationTime'] # 1349724919000
Ответ 2
Только предложение - получить доступ к вашему resp_dict через .get() для более грациозного подхода, который будет ухудшаться хорошо, если данные не так ожидаются.
resp_dict = json.loads(resp_str)
resp_dict.get('name') # will return None if 'name' doesn't exist
Вы также можете добавить некоторую логику для проверки ключа, если хотите.
if 'name' in resp_dict:
resp.dict['name']
else:
# do something else here.
Ответ 3
Извлечь одно значение из ответа JSON Python
Попробуйте это
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'])