#json #python-3.x #amazon-s3 #amazon-sqs
#json #python-3.x #amazon-s3 #amazon-sqs
Вопрос:
Из одного из методов, которые я получаю, выводится ниже
{'Records': [{'messageId': '2953dfd5-d848-42b2-a60b-43df00ec8e5f',
'receiptHandle': 'AQEBPMr5RbW3T2DG4pAYi ', 'body':
'I am still trying', 'attributes': {'ApproximateReceiveCount': '1',
'SentTimestamp': '1552073955807', 'SenderId': '944198216610',
'ApproximateFirstReceiveTimestamp': '1552073955816'},
'messageAttributes': {}, 'md5OfBody':
'2111a742ddbdac2d862fa6a204f7dc85', 'eventSource': 'aws:sqs',
'eventSourceARN': 'arn:aws:sqs:us-east-
1:944198216610:LambadaQueue', 'awsRegion': 'us-east-1'}]}
Теперь я хочу извлечь значение body из этого, поэтому я использовал ниже
тело=событие[‘Записи’][0][0][‘ тело’]
Но это не работает.Не могли бы вы, пожалуйста, помочь мне разобраться, что я делаю не так?
Комментарии:
1. итак, вы хотите этого? Я все еще пытаюсь
2. вы пробовали только
event['Records'][0]['body']
?
Ответ №1:
Что я делаю не так?
Records
Ключ представляет собой список, и вы можете выбирать элементы из списка, используя порядковый номер для этого элемента.
json_string = {
"Records": [
{
"messageId": "2953dfd5-d848-42b2-a60b-43df00ec8e5f",
"receiptHandle": "AQEBPMr5RbW3T2DG4pAYi ",
"body": "I am still trying",
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1552073955807",
"SenderId": "944198216610",
"ApproximateFirstReceiveTimestamp": "1552073955816"
},
"messageAttributes": { },
"md5OfBody": "2111a742ddbdac2d862fa6a204f7dc85",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-1:944198216610: LambadaQueue",
"awsRegion": "us-east-1"
}
]
}
Итак, когда вы это делаете json_string['Records'][0]
, выбирается первый элемент в списке, который снова является словарем:
{
"messageId": "2953dfd5-d848-42b2-a60b-43df00ec8e5f",
"receiptHandle": "AQEBPMr5RbW3T2DG4pAYi ",
"body": "I am still trying",
....}
Теперь, если вы это сделаете json_string['Records'][0][0]
, вы пытаетесь получить доступ к ключу словаря, подобному элементу в списке (используя индекс 0), что синтаксически неверно. Вы можете получить доступ к ключу по имени, например, json_string['Records'][0]['messageId']
если вы хотите получить доступ к значению для ‘MessageId’, или, как в вашем вопросе, к значению ключа «body», например, так:
`json_string['Records'][0]['body']`
#Output:
I am still trying
Комментарии:
1. Это надежный ответ, потому что вы потратили время на то, чтобы привести его в пример в OP. За это он заслуживает одобрения.
2. Спасибо, я сам немного боролся с JSON.
Ответ №2:
Если вы пытаетесь получить значение элемента «body», похоже, вам следует просто пропустить второе [0]
в вашем поиске. Правильно отформатированный, он выглядит следующим образом:
{
"Records": [
{
"messageId": "2953dfd5-d848-42b2-a60b-43df00ec8e5f",
"receiptHandle": "AQEBPMr5RbW3T2DG4pAYi ",
"body": "I am still trying",
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1552073955807",
"SenderId": "944198216610",
"ApproximateFirstReceiveTimestamp": "1552073955816"
},
"messageAttributes": { },
"md5OfBody": "2111a742ddbdac2d862fa6a204f7dc85",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-1:944198216610: LambadaQueue",
"awsRegion": "us-east-1"
}
]
}
Итак, чтобы получить значение поля «body» для первой записи в «Records», похоже, вам следует сделать:
body=event['Records'][0]['body']