Разобрать json строку в Python - PullRequest
0 голосов
/ 16 января 2020

Простой, но я еще не смог обернуть голову, разбирая вложенные списки и json структуры в Python ...

Вот грубое сообщение, которое я пытаюсь для разбора.

{
    "Records": [
        {
            "messageId": "1b9c0952-3fe3-4ab4-a8ae-26bd5d3445f8",
            "receiptHandle": "AQEBy40IsvNDy33dOhn4KB8+7apBecWpSuw5OgL9sw/Nf+tM2esLgqmWjGsd4n0oqB",
            "body": "{\n  \"Type\" : \"Notification\",\n  \"MessageId\" : \"dce5c301-029f-55e1-8cee-959b1ad4e500\",\n  \"TopicArn\" : \"arn:aws:sns:ap-southeast-2:062497424678:vid\",\n  \"Message\" : \"ChiliChallenge.mp4\",\n  \"Timestamp\" : \"2020-01-16T07:51:39.807Z\",\n  \"SignatureVersion\" : \"1\",\n  \"Signature\" : \"oloRF7SzS8ipWQFZieXDQ==\",\n  \"SigningCertURL\" : \"https://sns.ap-southeast-2.amazonaws.com/SimpleNotificationService-a.pem\",\n  \"UnsubscribeURL\" : \"https://sns.ap-southeast-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:ap-southeast-2:062478:vid\"\n}",
            "attributes": {
                "ApproximateReceiveCount": "1",
                "SentTimestamp": "1579161099897",
                "SenderId": "AIDAIY4XD42",
                "ApproximateFirstReceiveTimestamp": "1579161099945"
            },
            "messageAttributes": {},
            "md5OfBody": "1f246d643af4ea232d6d4c91f",
            "eventSource": "aws:sqs",
            "eventSourceARN": "arn:aws:sqs:ap-southeast-2:062497424678:vid",
            "awsRegion": "ap-southeast-2"
        }
    ]
}

Я пытаюсь извлечь Сообщение в разделе тела, заканчивающееся строкой как "ChiliChallenge.mp4 \"

Спасибо! По сути, я просто продолжаю получать либо TypeError: строковые индексы должны быть целыми числами, либо разбирать тело, но без дальнейшей детализации в списке без ошибок.

Вот моя попытка:

import json

with open ("event_testing.txt", "r") as myfile:
    event=myfile.read().replace('\n', '')
    str(event)
    event = json.loads(event)
    key = event['Records'][0]['body']
    print(key)

Ответы [ 2 ]

2 голосов
/ 16 января 2020

вы можете использовать json.loads для загрузки строки

with open ("event_testing.txt", "r") as fp:
    event = json.loads(fp.read())
    key = json.loads(event['Records'][0]['body'])['Message']
    print(key)


'ChiliChallenge.mp4'
1 голос
/ 16 января 2020

Скажи, что твое сообщение - фраза, я перестроил твой код, как: phrase_2 = phrase["Records"] print(phrase_2[0]["body"])

Тогда все работает четко. Поскольку начало записей, оно выглядит как массив, так что вам нужно организовать его.

...