Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python解析抛出JSON-字符串索引必须是整数_Python_Json - Fatal编程技术网

使用Python解析抛出JSON-字符串索引必须是整数

使用Python解析抛出JSON-字符串索引必须是整数,python,json,Python,Json,我试图用Python3解析json数据。 我的目标是从JSON中获取所有城市,并将它们添加到列表中: cities = [] for component in userdata['tagged_places']['data'][0]['place']['location']: cities.append(component['city']) Python向我返回以下错误: TypeError: string indices must be integers 这就是变量userdata

我试图用Python3解析json数据。 我的目标是从JSON中获取所有城市,并将它们添加到列表中:

cities = []
for component in userdata['tagged_places']['data'][0]['place']['location']:
    cities.append(component['city'])
Python向我返回以下错误:

TypeError: string indices must be integers
这就是变量userdata中的JSON:

    {  
   'id':'1234',
   'tagged_places':{  
      'data':{  
         'created_time':'2017-12-31T02:33:31+0000',
         'id':'1234',
         'place':{  
            'id':'455149097983173',
            'location':{  
               'city':'Buenos Aires',
               'country':'Argentina',
               'latitude':-34.59537,
               'longitude':-58.39196,
               'street':'Rodriguez Peña '               '1165, Recoleta, '               'Buenos Aires',
               'zip':'C1020ADW'
            },
            'name':'La Cholita'
         }
      },
      {  
         'created_time':'2017-11-04T13:43:00+0000',
         'id':'1234',
         'place':{  
            'id':'58666790576',
            'location':{  
               'city':'Concepción',
               'country':'Chile',
               'latitude':-36.829561426349,
               'longitude':-73.036282767458,
               'street':'Víctor Lamas '               '#1290',
               'zip':'4070386'
            },
            'name':'Universidad de Concepción'
         }
      },
我的目标是将康塞普西翁和布宜诺斯艾利斯重新列入我的城市名单

如果我这样做

city = userdata['tagged_places']['data'][0]['place']['location']['city'] 

城市返回正确。

您需要循环查看您的项目

mydict = userdata['tagged_places']['data'][0]['place']['location']
for key, value in mydict.iteritems():
    print key
    print value

试试这个,看看你是否能看到你的数据….

用户数据['taged_places']['data'][0]['place']['location']
是一个
命令。因此,您可以像通过

userdata['tagged_places']['data'][0]['place']['location']['city']
但是,迭代一个
dict
,会产生它的键,在您的例子中,这些键是字符串:

for component in userdata['tagged_places']['data'][0]['place']['location']:
    print(component)
    # 'city', 'country', etc.
    component['city']  # cannot work:  'city'['city']
如果你想收集所有的城市,你应该做如下事情:

# assuming data is a list, which it appears to be given your working code
for component in userdata['tagged_places']['data']:  
    cities.append(component['place']['location']['city'])

如果您的底层代码正常工作,那么您的问题是什么?在执行for循环之后,我得到了我提到的错误。我不明白为什么我会出错。这使我无法将所有城市添加到列表中。这两个片段都不可能工作,因为
['taged_places']['data']
是一个dict而不是列表。显示您的实际数据和代码。太棒了!这很有效。然而,cities.append(组件['place']['location']['city'])仍然给我一个键错误:“city”。但是所有的城市都会被收集到list@robjeiter你的代码中断了,但城市还是被收集了起来——你把我弄丢了:)你应该像评论中指出的那样,在问题中发布你实际数据的摘录。关键错误是因为有时候城市不是由Facebook提供的。现在一切都好了。多谢各位!