2017-06-05 43 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中的代码*起作用,显然这不是问题。 –