Вам нужна некоторая форма рекурсии ... но сначала вам нужно исправить свой объект данных (я думаю).
Вот схема того, что вам нужно:
from pprint import pprint
import json
MESSAGE = {
"messageId": "56ba2b85-fb61-4a28-97d3-941237228582",
"receiptHandle": "AQEB9mKPGdkuDgQkH3tNZ5pMd",
"body": {
"Type": "Notification",
"MessageId": "467a4ce6-4a1e-5cab-8801-1be6b30a621f",
"TopicArn": "arn:aws:sns:us-east-2:ttttt:TEST",
"Subject": "01 Publish for TEST ",
"Message": "{\\\"Store\\\":\\\"I01\\\",\\\"Loc\\\":\\\"I03\\\",\\\"User\\\":\\\"P37\\\",\\\"Mile\\\":\\\"1500\\\",\\\"Status\\\":true}\"",
"Timestamp": "2020-04-03T08:41:56.047Z",
"SignatureVersion": "1",
"Signature": "Kg",
"SigningCertURL": "something.com",
"UnsubscribeURL": "subscribermoke.com"
},
"attributes": {
"ApproximateReceiveCount": "42",
"SentTimestamp": "1585903316106",
"SenderId": "AIDAJQR6QDGQ7PATMSYEY",
"ApproximateFirstReceiveTimestamp": "1585903316106"
},
"messageAttributes": {},
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-:jjjjjj:sample-Dev",
"awsRegion": "us-east"
}
def find_messages_in_body(body):
if "Message" in body:
submsg = body["Message"]
print(submsg)
print(type(submsg))
submsg = json.loads(submsg)
submsg = find_messages_in_body(submsg)
return(submsg)
else:
return body
pprint(find_messages_in_body(MESSAGE["body"]))
Но когда вы запустите это, вы обнаружите, что это бомбы, потому что значение submsg
является строкой, но не допустимая строка JSON.
Итак ... что, опять же, ваш желаемый результат? Вы уверены, что правильно скопировали введенные данные? Есть ли у вас другие примеры входных данных?
Также ... возможно ли, что будет несколько возможных "дополнительных сообщений"? Если это так, вам нужно будет вернуть этот список или преобразовать его в генератор (с yield
вместо return
операторов). НО ПЕРВЫЙ ... проверьте ваш объект данных: MESSAGE["body"]["Message"]
в настоящее время недействителен JSON.