Извлечение из Json

#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']