【问题标题】:Create JSON with correct key-value strings to be parsed使用要解析的正确键值字符串创建 JSON
【发布时间】:2020-01-12 05:29:04
【问题描述】:

我需要重现一个 json,基本上是对我的代码运行一些测试,这些测试用于实时解析类似的 json。

这是我的代码 sn-p,事件是从 s3 PUT 通知生成的,即从 SNS 侦听器发布到 SQS -

event_body = json.loads(event["Records"][0]["body"])
event_body_msg = json.loads(event_body['Message'])
event_body_dict = event_body_msg['Records'][0]
s3_buck = event_body_dict['s3']['bucket']['name']

我希望我的 json 包含将由此代码解析的层次结构(因为我的测试是在 s3_buck 的值上编写的)。这是我想出的 json -

{ “记录”: [ { "messageId": "a6665910-ab5a-46c3-baaf-6086c0c90511", “receiptHandle”: “+ AQEBscBCR7DwSLqd5SXvEAX 8NUImpMPNmJ9hSD03HgWHhPnNZoIIqHkqI8lvwGMLjhX2R1ogPfo09z8EHcI7Nuh851vi4cIPBngMbIS6yw / rBtG115vSUyfN8i1yKM6Oz7iSJ2kIJCGmWRF2Rhsc8dH31zcyZKbVz / SzCOK8S / E9SdFHkPi2iNm4tr4PgrI + ZrvtYUicOuZQAJ8 ++ hYo0rB43YCZKSZWMV1LG4iz2 + OKVO08qZv3WyJ3pUegW4LXNp1xAf2abep44lYgWqqDWyWRlnpKayagqaTSaqR / OzNM3Iky9MnXqVz3g7CRBO28h2noUy4T6cW6HmlZ + xe3TWHOToJeWqiRnsY1HYuZxGscRpDUXIq5V7pZPhkLU2XbdQg”, "body": "{\"Message\": {\"Records\": [{\"s3\": {\"bucket\": {\"name\": \"demo-bucket-name\" ,\"arn\": \"arn:aws:s3:::demo-bucket-name\"},\"object\": {\"key\": \"demo-key-prefix.json\"}}}]}}" } ] }

我正在尝试复制 aws sns 通知以创建仅包含我的用例属性的示例 json。这是 sns 产生的示例事件(从 lambda 控制台复制)-https://www.heypasteit.com/clip/0IUAE3。我只选择我需要的属性,例如 s3 bucket_name 或 arn 等。

但是,这里的问题是我在运行 event["Records"][0]["body"] 时遇到错误,并带有错误消息 -

Traceback(最近一次调用最后一次):文件“”,第 1 行,in 文件 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/init.py", 第 354 行,在负载中 返回 _default_decoder.decode(s) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py”, 第 342 行,在解码中 raise JSONDecodeError("Extra data", s, end) json.decoder.JSONDecodeError: Extra data: line 1 column 251 (char 250)

我尝试使用 r""" 将 json 字符串包含在 "body" 键中,但没有成功。想知道创建 json 的正确格式是什么。

【问题讨论】:

    标签: json python-3.x amazon-web-services


    【解决方案1】:

    body 作为 JSON 字符串无效。它包含 2 条记录,没有 [,

    让我们打印您的正文字符串,然后使用https://jsonlint.com/ 进行验证

    【讨论】:

    • 啊..解决了这个问题(在问题中也是如此),现在它成功到 json.loads() 并创建 event_body。但是,内部带有“记录”的内容仍被标识为字典(因此 load() 失败)。我尝试在“记录”字典中添加引号,但随后在 load() 处无法创建带有错误消息的 event_body -“json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 16 (char 15)”。
    • 我认为这是另一个问题。但我仍然在这里粘贴代码。 print(json.loads(event["Records"][0]["body"])["Message"]["Records"][0]["s3"]["bucket"]["name"])
    • 您不应该通过删除旧消息来更新问题。谢谢
    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多