Мой файл 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
}
]
}
Я пытаюсь проанализировать данные, хранящиеся в функции 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_id. как можно было бы получить содержимое каждого поля dict, чтобы я мог передать их в свою базу данных?
Например, получить местоположение, geo_type и т. д.
Я не понимаю вопроса. Какой у вас желаемый результат? И вы четко знаете, как получить доступ к элементам в dict, так что же мешает вам получить этот вывод?






В JSON [] представляет собой массив, а {} представляет объект. Python анализирует объект JSON (например, {"features": ..., "user_id": ...}) как dict. Вы должны использовать метод .items() для получения пар ключ-значение из dict. Итерация по дикту дает только ключи.
вы можете проанализировать features, используя понимание списка:
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()]
аналогичным образом может быть сконструирован user_list.
И, наконец, tweet_list, который функционально выглядит как zip из features и user_list, можно напрямую сконструировать, используя понимание списка и распаковку словаря, например:
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}]
Вы получите больше и точных ответов, если создадите пример Минимальный, полный и поддающийся проверке. Особенно убедитесь, что входные и ожидаемые тестовые данные являются полными (не псевдоданными), и их можно легко вырезать и вставить в редактор, чтобы можно было протестировать предлагаемые решения.