2015-01-16 46 views
8

我有以下的JSON詞典:AttributeError的:「統一」對象有沒有屬性「值」當解析JSON字典值

{ 
u'period': 16, u'formationName': u'442', u'formationId': 2, 
u'formationSlots': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0], 
u'jerseyNumbers': [1, 20, 3, 15, 17, 5, 19, 6, 18, 25, 10, 2, 4, 12, 16, 22, 24, 
        34], 
u'playerIds': [23122, 38772, 24148, 39935, 29798, 75177, 3860, 8505, 
       26013, 3807, 34693, 18181, 4145, 23446, 8327, 107395, 29762, 254558], 
u'captainPlayerId': 29798, 
u'startMinuteExpanded': 0, 
u'endMinuteExpanded': 82, 
u'formationPositions': [{u'horizontal': 5.0, u'vertical': 0.0}, 
    {u'horizontal': 1.0, u'vertical': 2.5}, {u'horizontal': 9.0, u'vertical': 2.5}, 
    {u'horizontal':3.5, u'vertical': 6.0}, {u'horizontal': 3.5, u'vertical': 2.5}, 
    {u'horizontal': 6.5, u'vertical': 2.5}, {u'horizontal': 1.0, u'vertical': 6.0}, 
    {u'horizontal': 6.5, u'vertical': 6.0}, {u'horizontal': 6.5, u'vertical': 9.0}, 
    {u'horizontal': 3.5, u'vertical': 9.0}, {u'horizontal': 9.0, u'vertical': 6.0}] 
} 

正如你可以看到一些字典值都包含在列表內。我想以編程方式獲得像這樣從這個對象中的所有值:

for myvalue in myjsonobject: 
    print mydict 
    for mysubvalue in myvalue: 
     print mysubvalue 

此打印字典鍵:

period 
formationName 
formationId 
formationSlots 
jerseyNumbers 
playerIds 
captainPlayerId 
startMinuteExpanded 
endMinuteExpanded 
formationPositions 

當什麼其實我要的是價值。我曾嘗試與打印mysubvalue.values()更換聯機打印mysubvalue,然而這將導致以下錯誤:

Traceback (most recent call last): 
    File "C:\Python27\counter.py", line 78, in <module> 
    print mysubdict.values() 
AttributeError: 'unicode' object has no attribute 'values' 

我正在一個受過教育的猜測在這裏,我不需要用json.loads(mysubdict)讓我訪問.values()功能。如果是這樣,我不知道爲什麼我得到這個錯誤。

任何人都可以協助嗎?

感謝

回答

8

如果遍歷字典本身(myjsonobject中的myvalue),您將迭代字典的鍵。當循環使用for循環時,無論循環使用dict(myjsonobject)本身,myjsonobject.keys()還是myjsonobject.iterkeys(),行爲都將保持不變。 dict.iterkeys()通常是優選的,因爲它是明確的和有效的:

for myvalue in myjsonobject.iterkeys():

1

你遍歷JSON字典的鍵,然後調用.values()上的每個按鍵。

for myvalue in myjsonobject: 

在密鑰上迭代。所以當你得到一個字符串的關鍵字時,比如說,u'period':16,它將打印'period'.values(),當字符串類沒有.values()時,它將吐出該錯誤。

如果你想把整個JSON字典壓扁到任意深度,我會建議一個遞歸的方法。

+0

您好。你能否詳細介紹一下你在想什麼? – gdogg371

相關問題