#python-3.x
#python-3.x
Вопрос:
Я пытаюсь извлечь некоторые данные из файла json в корзине s3, однако я получаю эту ошибку: индексы списка должны быть целыми числами или срезами, а не str.
Вот код:
content_object = s3.get_object(Bucket=source_bucket, Key=key)['Body']
json_content = json.load(content_object)
for i in json_content:
ID = json_content[i]['ID']
DateTime = json_content[i]['DateTime']
SourceDevice = json_content[i]['SourceDevice']
DestinationDevice = json_content[i]['DestinationDevice']
DataType= json_content[i]['DataType']
Activity = json_content[i]['Activity']
И файл json:
[
{
"ID": "No.",
"DateTime": "Time",
"SourceDevice": "Source",
"DestinationDevice": "Destination",
"DataType": "Protocol",
"Activity": "label"
},
{
"ID": "1",
"DateTime": "SomeTime",
"SourceDevice": "SomeSource",
"DestinationDevice": "SomeDestination",
"DataType": "ARP",
"Activity": "normal"
},
Я просмотрел множество тем с той же проблемой, но я не смог найти ответ, связанный с моим кодом.Спасибо за вашу помощь!
Комментарии:
1. Перво-наперво: что находится
i
вfor i in json_content
, и вы уверены, чтоjson_content
с помощьюi
этого можно проиндексировать позже?2.
for i in json_content:
=>type(i)
==> dict … остальная часть вашего кода не имеет особого смысла из-за этого….
Ответ №1:
При использовании for x in some_list
в Python вы получаете значения в списке как x
автоматически, а не индекс в списке. Итак, вы хотите сделать это вместо:
for item in json_content:
ID = item['ID']
...
Если вам также нужен индекс списка в цикле, используйте enumerate
:
for index, value in enumerate(json_content):
print(index, value['SourceDevice']) # prints "0 Source" and "1 SomeSource"
Комментарии:
1. Он возвращает dict. Большое вам спасибо за вашу помощь, с вашим первым ответом все отлично сработало!
Ответ №2:
Вам нужно изменить
for i in json_content
с
for i in range(len(json_content))
Вы пытаетесь проиндексировать список с помощью элемента списка json_content. В качестве альтернативы вы можете сделать
ID = i['ID']
для получения элементов словаря.