2012-07-25 43 views
-3

我把数据从wunderground 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() 

在日落时打印精细,hightide时产生错误“名单指数必须是整数,而不是str“

python非常新,只是试图找到我的方式。请在我身上轻松一下,这里的一些对话似乎很吓人。

编辑这里是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": [] 
    } 
} 
+2

一个列表,其中是源数据? – jdi 2012-07-25 18:45:01

+3

那么,'parsed_json ['tide'] ['tideSummary']'或'parsed_json ['tide']'的价值是什么?如果我们不知道您正在使用哪些数据,我们无法帮助您。这个错误信息非常清晰:无论是'parsed_json ['tide']'还是'parsed_json ['tide'] ['tideSummary']'都是**列表**,而不是您想象的字典。查看数据并使用适当的方法访问它。 – 2012-07-25 18:45:04

+1

请显示完整的堆栈跟踪。 http://sscce.org/ – Marcin 2012-07-25 18:45:08

回答

3

没有看到源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的值是一个列表,虽然你的数据有空,所以我不知道里面是什么。

如果它是总结类型的字典列表有日期值,那么你可以这样做:

# assume: parsed_json['tide']['tideSummary'] = [{"date":"value"}] 

for summary in parsed_json['tide']['tideSummary']: 
    print summary['date'] 

...同样,这个假设它们的{"date":"value"}

+0

非常感谢你的帮助。似乎问题的一部分与数据并不总是出现在json中有关。因此@jdi发现tideSummary为空。自从我第一次发布以来,它一直在关闭。可能是时间去其他地方查看我的数据了。 – mbs11 2012-07-26 00:43:56

+0

@ user1550220:好的,如果数据源是可靠的,那就好了。但只要你检查它是一个列表,不管它是否为空,它都不应该像这样崩溃。 – jdi 2012-07-26 00:49:47

相关问题