2016-04-08 112 views
-2

這可能是一個愚蠢的問題,但我無法弄清楚我的生活 請原諒我混亂的變量命名。如果有人能告訴我爲什麼發生以下錯誤和/或任何其他錯誤,我會欣喜若狂。加載Twitter搜索結果時出錯

JSON:錯誤期待屬性名行1列2(字符1)

import json 
import twitter 
a = twitter.get_account("@Suppert2") 
q = "cxdffcfctftcvft" 
ac = twitter.search(a,q, count=1, parameters=None) 
abg = str(ac) 
print (abg) 
ah = json.loads(abg) # here is where the error is occurring 
print ah["completed_in"] 

當你打印abg它出來爲:

{u'search_metadata': {u'count': 1, u'completed_in': 0.048, u'max_id_str': u'718234026394443782', u'since_id_str': u'0', u'refresh_url': u'?since_id=718234026394443782&q=x597567654dfv&include_entities=1', u'since_id': 0, u'query': u'x597567654dfv', u'max_id': 718234026394443782L}, u'statuses': []} 

回答

0

這不是有效的JSON,您可以使用http://jsonlint.com進行驗證。

+0

是的,這是有效的:'''{ \t 「search_metadata」:{ \t \t 「計數」:1, \t \t 「completed_in」:0.048 \t} }''' – Zepplock

+0

但@alecxe的答案是正確的 – Zepplock

+0

爲什麼我的評論被刪除? –

3

沒有必要在這裏加載JSON,twitter.search()回報你一個Python字典擺在首位,只是用它:

ac = twitter.search(a,q, count=1, parameters=None) 
print(ac["statuses"]) 
print(ac["search_metadata"]["completed_in"]) 
+0

這裏不僅僅是「不需要」加載JSON;你不能在這裏加載JSON。因爲它不是JSON。 –

+0

:0噢,我的天啊,我是一個白癡,我以爲這麼想非常感謝你, –

0

它看起來有點像JSON,但它不是JSON。

那些u前綴,L後綴和使用單引號都使其無效JSON。這就是爲什麼將它視爲JSON失敗的原因(並且您可以通過在http://jsonlint.com上嘗試驗證它而不是JSON,總是一個很好的第一個調試步驟)。

這個字符串實際上是一個Python字典,你從str(ac)因爲Twitter的API給你一個Python字典(在ac)得到的字符串表示。

因此直接使用ac,例如,

print(ac["search_metadata"]["completed_in"])