2017-04-14 160 views
1

我試圖得到的值的第一個對象的directionstation在此JSON回來了,但我發現了以下錯誤KeyError異常:0在Python

KeyError: 0

這裏是我的代碼:

print(json.dumps(savedrequest, indent=4)) 
savedstation = savedrequest[0]['station'] 
saveddirection = savedrequest[0]['direction'] 

而這正是它的返回在打印:

{ 
    "-bas": { 
     "email_address": "[email protected]", 
     "direction": "Southbound", 
     "station": "place-har" 
    }, 
    "-bus": { 
     "email_address": "[email protected]", 
     "direction": "Southbound", 
     "station": "place-su" 
    } 
} 

我不知道什麼-bas-bus將返回時,我需要選擇數組中的第一個對象。

+1

'savedrequest'不是一個數組,它沒有一個關鍵'0'。你需要使用''-bas''(或''bus'')。 –

+0

在那個數組中,是否有一種方法可以選擇第一個對象並從這些'direction'和'station'鍵中獲取值? – beaconhill

+0

你爲什麼要訪問鍵「0」? –

回答

3

你的JSON被解碼爲一個「對象」(在Python中稱爲dict),它不是一個數組。因此,它沒有特別的「秩序」。你認爲「第一」元素實際上可能不會以這種方式存儲。不能保證每次都是同一個對象。

,你可以嘗試的,但是,通過使用json.loads(和json.load)的object_pairs_hook參數,這些dict秒值進行轉換爲OrderedDict秒。 OrderedDict就像是dict,但它記得那個順序元素被插入到它中。

import json 
from collections import OrderedDict 

savedrequest = json.loads(data, object_pairs_hook=OrderedDict) 

# Then you can get the "first" value as `OrderedDict` remembers order 
#firstKey = next(iter(savedrequest)) 
first = next(iter(savedrequest.values())) 

savedstation = first['station'] 
saveddirection = first['direction'] 

(這個答案是得益於https://stackoverflow.com/a/6921760https://stackoverflow.com/a/21067850