-4

我正在从 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()

虽然日落时间打印得很好,但高潮时间会产生错误“列表索引必须是整数,而不是 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": []
  }
}
4

1 回答 1

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"}

于 2012-07-25T18:48:46.110 回答