如何使用python3解析json中dict列表中的内容

如何使用python3解析json中dict列表中的内容,python,json,python-3.x,Python,Json,Python 3.x,我的json文件: { "data": [ { "features": { "location": "West Springfield, MA", "geo_type": "User location", "screen_name": "JtTatro", "primary_geo": "West Springfield, MA", "id": 2158

我的json文件:

{
"data": [
    {
        "features": {
            "location": "West Springfield, MA",
            "geo_type": "User location",
            "screen_name": "JtTatro",
            "primary_geo": "West Springfield, MA",
            "id": 2158092352,
            "tweets": 1,
            "name": "Jim Tatro"
        },
        "user_id": 2158092352
    }

,
{
            "features": {
                "location": "Tijuana, Baja California",
                "geo_type": "User location",
                "screen_name": "YuitziContreras",
                "primary_geo": "Tijuana, Baja California",
                "id": 996917180980744193,
                "tweets": 1,
                "name": "yuitzi contreras"
            },
            "user_id": 996917180980744193
        }
    ]
}
我正在尝试解析存储在features dict中的数据。到目前为止,我的代码是:

import json

input_file = open ('file.json')
json_array = json.load(input_file)
tweet_list = []
features_list = []
user_list =[]

for item in json_array:
        for item2 in json_array[item]:
            tweet_list.append(item2)


for features,user in tweet_list:
    print(features,user)
上面的代码返回dict名称:
features,user\u id
。如何获取每个dict字段的内容,以便将其传递到数据库


例如,get location、geo_type等。

在JSON中,
[]
表示数组,而
{}
表示对象。Python将JSON对象(例如,
{“features”:…,“user_id”:…}
)解析为dict。您应该使用
.items()
方法从dict中获取键值对。迭代dict只会得到键值。

您可以使用列表理解来解析
特性

features = [v['features'] for v in json_array['data']]
如果任何一行没有名为
features
的键,则
v['features']
将抛出
KeyError

为了避免这种情况

features = [v['features'] for v in json_array['data'] if 'features' in v.keys()]
类似地,可以构造
用户列表

最后,
tweet\u列表
,在功能上似乎是
功能
用户列表
zip
,可以使用列表理解和词典解包直接构建,如下所示:

tweet_list = [dict(v['features'], **{'user_id': v['user_id']}) 
              for v in json_array['data']
              if 'features' in v.keys() and 'user_id' in v.keys()]

# tweet_list outputs:

[{'geo_type': 'User location',
  'id': 2158092352,
  'location': 'West Springfield, MA',
  'name': 'Jim Tatro',
  'primary_geo': 'West Springfield, MA',
  'screen_name': 'JtTatro',
  'tweets': 1,
  'user_id': 2158092352},
 {'geo_type': 'User location',
  'id': 996917180980744193,
  'location': 'Tijuana, Baja California',
  'name': 'yuitzi contreras',
  'primary_geo': 'Tijuana, Baja California',
  'screen_name': 'YuitziContreras',
  'tweets': 1,
  'user_id': 996917180980744193}]

# features outputs
[{'geo_type': 'User location',
  'id': 2158092352,
  'location': 'West Springfield, MA',
  'name': 'Jim Tatro',
  'primary_geo': 'West Springfield, MA',
  'screen_name': 'JtTatro',
  'tweets': 1},
 {'geo_type': 'User location',
  'id': 996917180980744193,
  'location': 'Tijuana, Baja California',
  'name': 'yuitzi contreras',
  'primary_geo': 'Tijuana, Baja California',
  'screen_name': 'YuitziContreras',
  'tweets': 1}]

如果你创建一个例子,你会得到更多更好的答案。尤其要确保输入和预期的测试数据是完整的(不是伪数据),并且可以很容易地剪切和粘贴到编辑器中,以便测试建议的解决方案。我不理解这个问题。你想要的输出是什么?您清楚地知道如何访问dict中的元素,那么是什么阻止了您获得该输出呢?