首先,我将自由地让自己成为一个笨拙的文科专家,他完全可以自学此脚本。就是说,我正在尝试使用以下代码从USGS水数据服务获取值:
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响应中提取所需值的教程,但大多数教程都非常简单。我遇到的困难是从该服务返回的看起来非常复杂的响应中提取出来的。查看响应,我可以看到我想要的是来自两个不同部分的值和一个时间值。因此,我可以查看响应并查看所需的内容,但我一生无法解决如何提取这些值。
使用json.loads会将您的数据转换为python 字典。
json.loads
使用以下命令访问字典值 ['key']
['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