-4

このコードのデータは、wunderground API と 1 行から取得しています。

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']

これは、ルート要素と 2 つの子要素がすべて辞書であり、文字列キーを介してアクセスできることを前提としています。どうやらこれらのデータ要素の 1 つはリストであり、辞書ではありません。

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 に答える