2016-08-11 29 views
-1

每次我從JSON數據提取JSON數據提取,我就得到了TypeError: unhashable type: 'dict'Django的 - 使用Python

我的JSON信息

u 'paging': { 
    u 'cursors': { 
     u 'after': u 'MTQyNzMzMjE3MDgxNzUzOQZDZD', u 'before': u 'OTUzNDg3MjMxMzQ2NjQ0' 
    } 
}, u 'data': [{ 
    u 'access_token': u 'XXXXX', 
     u 'category': u 'Internet/Software', u 'perms': [u 'ADMINISTER', 
      u 'EDIT_PROFILE', u 'CREATE_CONTENT', u 'MODERATE_CONTENT', 
      u 'CREATE_ADS', u 'BASIC_ADMIN' 
     ], u 'name': u 'Nurdin Norazan Services', u 'id': u '953487231346644' 
}, { 
    u 'access_token': u 'XXXXX', 
     u 'category': u 'Internet/Software', u 'perms': [u 'ADMINISTER', 
      u 'EDIT_PROFILE', u 'CREATE_CONTENT', u 'MODERATE_CONTENT', 
      u 'CREATE_ADS', u 'BASIC_ADMIN' 
     ], u 'name': u 'Intellij System Solution Sdn. Bhd.', u 'id': u '433616770180650' 
}] 
} 

我的代碼

data = json.load(urllib2.urlopen("https://graph.facebook.com/v2.7/me/accounts?access_token="XXXXX") 
print (data[data][0][id]) //953487231346644 

BTW,如何打印循環數據?

請指教。謝謝。

回答

0

我剛剛得到了答案

data = json.load(urllib2.urlopen("https://graph.facebook.com/v2.7/me/accounts?access_token="XXXXX") 
for i in data['data']: 
     print i['id'] 
0

根據文檔,json.load用於讀取文件指針(或實現接口read()的某個對象)。我想說你想json.loads,但實際上你想json.dumps。你的TypeError意味着你得到了一個Python字典(非常類似於JSON),而json.load/s需要一個字符串。

>>> import json 
>>> json.dumps({"foo": "bar"}) 
'{"foo": "bar"}' 
>>> json.loads({"foo": "bar"}) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python3.4/json/__init__.py", line 312, in loads 
    s.__class__.__name__)) 
TypeError: the JSON object must be str, not 'dict' 
>>> json.loads(json.dumps({"foo": "bar"})) 
{'foo': 'bar'} 

至於通過數據循環,遍歷它:

for key, val in data.items(): 
    print("{}: {}".format(key, val)) 

您可能需要實施一些發燒友的循環,如果你想通過JSON遞歸循環。

1

您的問題不在於「提取」數據:它是您的打印語句,因爲完整的回溯會顯示。

在該聲明中,出於某種原因,您致電data[data]。但這只是意味着你正試圖爲自己編制索引數據字典。要獲取數據密鑰,您需要使用字符串:data["data"];和id值相同。

print(data["data"][0]["id"]) 
+0

如何在循環打印? –

+0

用'for'循環? –

+0

是的,如何打印循環使用? –