2017-06-05 44 views
0

我想用這個來讀取一個JSON文件的屬性: d['text']['entities']['mention'][0]['screen_name']讀取值

JSON文件

{ 
    "text" : { 
     "content" : "@narendramodi Did u even know the fare of metro has been increased by 65%", 

     "entities" : { 
      "user_mentions" : [ ], 
      "mention" : [ 
       { 
        "indices" : [ 
         0, 
         13 
        ], 
        "id_str" : "18839785", 
        "screen_name" : "narendramodi", 
        "name" : "Narendra Modi", 
        "id" : 18839785 
       } 
      ], 
      "hashtags" : [ ], 
     }, 

    } 
} 

我試圖用py2neo加載在Neo4j的數據庫許多JSON文件圖書館。

雖然在"mention" : [ ],提的字段爲空,它說

IndexError JSON文件的一個accesing d['text']['entities']['mention'][0]['screen_name'] :列表索引超出範圍

錯誤是很明顯的,但是我應該怎麼處理這?

+2

它在我的電腦(python 3.6)完美的工作,值是''narendramodi''沒有任何問題。 –

+0

它對我來說工作得非常好。這是你所有的JSON文件嗎?我正在使用Python 2.7 .. –

+0

您發佈的json和您的程序正在閱讀的json之間似乎不匹配。 –

回答

0

你可以只使用try/except塊。像

try: 
    data = d['text']['entities']['mention'][0]['screen_name'] 
    ... 
except IndexError: 
    data = None # or handle this case in other way 
+0

現在感謝它工作正常。 –

+0

@Aman Kumar歡迎您)如果我的回答很有幫助,您可以將其標記爲正確答案。 – kvorobiev

-1

試試這個 -

mentions = d.get('text',{}).get('entities',{}).get('mention' ,[]) 
    if len(mentions)>0: 
     print(mentions[0].get('screen_name',None)) 
    else: 
     print(None) 
+2

字符串不會產生「IndexError:列表索引超出範圍」。此外,你不要將它轉換成「json對象」,而是* python對象*。 JSON是一種文本序列化格式。 –

+0

@ juanpa.arrivillaga,我測試了這段代碼,它正在工作,看起來像json是錯誤的,並在json中有一些額外的','。 – tom

+0

是的,我知道代碼有效,但這個答案沒有解決OP的問題,這是一個引發'IndexError'的列表。事實上,OPs中的代碼*起作用,顯然這不是問題。 –