我从神童API和一行中提取此代码的数据:
sunsethour = parsed_json ['moon_phase']['sunset']['hour']
sunsetminute = parsed_json ['moon_phase']['sunset']['minute']
print "nSunset is at: %s:%s" % (sunsethour, sunsetminute)
hightide = parsed_json ['tide']['tideSummary']['date']
print (hightide)
f.close()
当日落时间打印良好时,高点时间会产生错误"列表索引必须是整数,而不是str"
对python很陌生,只是想找到我的路。请对我宽容一点,这里的一些对话似乎很吓人。
EDIT这里是json:http://api.wunderground.com/api/a66b1087ab1e51a5/geolookup/conditions/astronomy/tide/q/MA/Boston.json
截断示例:
{
"tide": {
"tideInfo": [
{
"tideSite": "Chelsea St. Bridge, Chelsea River, ...",
"lon": "-71.0233",
"units": "feet",
"tzname": "America/New_York",
"lat": "42.3867",
"type": "tide"
}
],
"tideSummaryStats": [
{
"minheight": 99.0,
"maxheight": -99.0
}
],
"tideSummary": []
}
}
在没有看到源JSON的情况下,这里是迄今为止我能提供的最好的:
hightide = parsed_json ['tide']['tideSummary']['date']
这假设根元素和两个子元素都是字典,可以通过字符串键访问。显然,这些数据元素中的一个是列表,而不是字典:
parsed_json['tide'] # could be a list of tides?
parsed_json['tide']['tideSummary'] # could be a list of tide summaries?
parsed_json['tide']['tideSummary']['date'] # could be a list of dates?
所有这些都必须产生词典。查看这些值,看看它们中是否有实际的列表:
aList = ['1','2','3']
aDict = {'1':1, '2':2, '3':3}
>>> aList['1']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
>>> aDict['1']
1
更新
从json结构的更新来看,是parsed_json ['tide']['tideSummary']
给您带来了问题。tideSummary
的值是一个列表,尽管您的数据是空的,所以我不确定里面是什么。
如果它是一个具有日期值的摘要dict列表,那么你可以这样做:
# assume: parsed_json['tide']['tideSummary'] = [{"date":"value"}]
for summary in parsed_json['tide']['tideSummary']:
print summary['date']
同样,这假设它们是{"date":"value"}
的列表