Извлечение из Json - PullRequest
       19

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

0 голосов
/ 08 марта 2019

От одного из методов я получаю ниже вывод

        {'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] [ 'тело']

Но это не работает. Можете ли вы помочь мне выяснить, что я не так делаю?

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Что я делаю не так?

Клавиша 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
0 голосов
/ 08 марта 2019

Если вы пытаетесь получить значение элемента "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=event['Records'][0]['body']

0 голосов
/ 08 марта 2019

Вы пытаетесь получить «Я все еще пытаюсь»?

json_data = {
  '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'
  }]
}

print (json_data['Records'][0]['body'])
# output
# I am still trying
...