【问题标题】:How do I concat two jsons in python如何在python中连接两个json
【发布时间】:2021-08-06 14:54:32
【问题描述】:

我正在尝试将数组 json 列表放入其中一个 json 数组中,但我的尝试没有按我想要的方式工作。这是我的尝试。

import json
import uuid
from datetime import datetime

accountIds = [12345,56789]
members= {"L": []}
for accountId in accountIds:
    members["L"].append({"M": {"memberType": {"S": "account"}}},
    {"M": {"memberId": {"S": accountId}}},
    {"M": {"history": {"L": [
    {"M": {"startDate": ""}},
    {"M": {"endDate": ""}}]}}})

    
group = {
    "pk": {"S": str(uuid.uuid4())},
    "pkType": {"S": "pk"},
    "client": {"S": '123'},
    "groupName": {"S": 'abc'},
    "createdDate": {"S": datetime.today().isoformat()},
    "modifiedDate": {"S": datetime.today().isoformat()},
    "status": {"S": "active"},
    "Members": {"L": [members]}
        }
print(json.dumps(group));

这是我想要的结果。

{
   "pk":{
      "S":"9c1fbd69-274f-4b9e-be30-3f8f9a00e0ac"
   },
   "pkType":{
      "S":"pk"
   },
   "client":{
      "S":"123"
   },
   "groupName":{
      "S":"abc"
   },
   "createdDate":{
      "S":"2021-05-17T10:06:22.622634"
   },
   "modifiedDate":{
      "S":"2021-05-17T10:06:22.622668"
   },
   "status":{
      "S":"active"
   },
   "Members":{
      "L":[{
         {
            "M":{
               "memberType":{
                  "S":"account"
               }
            }
         },
         {
            "M":{
               "memberId":{
                  "S":"12345"
               }
            }
         },
         {
            "M":{
               "history":{
                  "L":[
                     {
                        "M":{
                           "startDate":""
                        }
                     },
                     {
                        "M":{
                           "endDate":""
                        }
                     }
                  ]
               }
            }
         }},
         {
         {
            "M":{
               "memberType":{
                  "S":"account"
               }
            }
         },
         {
            "M":{
               "memberId":{
                  "S":"6789"
               }
            }
         },
         {
            "M":{
               "history":{
                  "L":[
                     {
                        "M":{
                           "startDate":""
                        }
                     },
                     {
                        "M":{
                           "endDate":""
                        }
                     }
                  ]
               }
            }
         }}
      ]
   }
}

请注意Members下 下面算作数组中的一个对象 {{ “米”:{ “成员类型”:{ “S”:“帐户” } } }, { “米”:{ “会员ID”: { "S": 帐户 ID } } }, { “米”:{ “历史”: { “L”:[ { “米”:{ “开始日期”: ”” } }, { “米”:{ “结束日期”: ”” } } ] } } }}

【问题讨论】:

    标签: python amazon-web-services aws-lambda amazon-dynamodb


    【解决方案1】:

    如何先合并两个字典,然后将合并的字典转储到 json。我们可以合并两个字典,如下所示:

    merged_dict = {**dict1, **dict2}

    例子:

    import json
    
    a = {
        "A": 1,
        "B": 2,
        "C": 3
    }
    
    b = {
        "D": 4,
        "E": 5
    }
    
    c = {**a, **b}
    
    print(json.dumps(c))
    

    打印出来

    {"A": 1, "B": 2, "C": 3, "D": 4, "E": 5}
    

    更新

    在评论中提到的这种特殊情况下,我们实际上并不需要合并两个字典。将"Members": {"L": [members]} 更改为"Members": members 应该可以解决问题。但是无法实现精确的格式,因为在这里我们试图序列化SetSerialising 在 json 中不可能有一个集合,它会抛出一个错误。所以我们最好的选择是一个列表。修改后的代码如下。

    import json
    import uuid
    from datetime import datetime
    
    accountIds = [12345, 56789]
    members = {"L": []}
    for accountId in accountIds:
        members["L"].append([{"M": {"memberType": {"S": "account"}}}, #Added square bracket to make it a list
                            {"M": {"memberId": {"S": accountId}}},
                            {"M": {"history": {"L": [
                                {"M": {"startDate": ""}},
                                {"M": {"endDate": ""}}]}}}])
    
    group = {
        "pk": {"S": str(uuid.uuid4())},
        "pkType": {"S": "pk"},
        "client": {"S": '123'},
        "groupName": {"S": 'abc'},
        "createdDate": {"S": datetime.today().isoformat()},
        "modifiedDate": {"S": datetime.today().isoformat()},
        "status": {"S": "active"},
        "Members": members} # modified from "Members": {"L": [members]}
    print(json.dumps(group));
    

    打印出来

    {
        "pk": {
            "S": "814c2fb9-8afd-499c-b98a-592b53bb9ca5"
        },
        "pkType": {
            "S": "pk"
        },
        "client": {
            "S": "123"
        },
        "groupName": {
            "S": "abc"
        },
        "createdDate": {
            "S": "2021-05-17T18:35:04.388906"
        },
        "modifiedDate": {
            "S": "2021-05-17T18:35:04.388906"
        },
        "status": {
            "S": "active"
        },
        "Members": {
            "L": [
                [
                    {
                        "M": {
                            "memberType": {
                                "S": "account"
                            }
                        }
                    },
                    {
                        "M": {
                            "memberId": {
                                "S": 12345
                            }
                        }
                    },
                    {
                        "M": {
                            "history": {
                                "L": [
                                    {
                                        "M": {
                                            "startDate": ""
                                        }
                                    },
                                    {
                                        "M": {
                                            "endDate": ""
                                        }
                                    }
                                ]
                            }
                        }
                    }
                ],
                [
                    {
                        "M": {
                            "memberType": {
                                "S": "account"
                            }
                        }
                    },
                    {
                        "M": {
                            "memberId": {
                                "S": 56789
                            }
                        }
                    },
                    {
                        "M": {
                            "history": {
                                "L": [
                                    {
                                        "M": {
                                            "startDate": ""
                                        }
                                    },
                                    {
                                        "M": {
                                            "endDate": ""
                                        }
                                    }
                                ]
                            }
                        }
                    }
                ]
            ]
        }
    }
    

    我们可以通过迭代group["Members"]["L"] 来访问问题中提到的各个对象,如下所示:

    for item in group["Members"]["L"]:
        print(item)
    

    打印出来

    [{'M': {'memberType': {'S': 'account'}}}, {'M': {'memberId': {'S': 12345}}}, {'M': {'history': {'L': [{'M': {'startDate': ''}}, {'M': {'endDate': ''}}]}}}]
    [{'M': {'memberType': {'S': 'account'}}}, {'M': {'memberId': {'S': 56789}}}, {'M': {'history': {'L': [{'M': {'startDate': ''}}, {'M': {'endDate': ''}}]}}}]
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢罗伊,但问题是成员下有两个“L”,它应该是一个数组[{“M”}。不是数组数组。我更新了描述
    • 在这种情况下,我们需要将单个字典添加到列表中。 {{"M":"N"},{"O":"P"}} 如问题中所述,不是合法字典。我刚刚用方括号替换了外部大括号,因为它看起来像一个列表。
    • 我明白了,但是如何将单个词典添加到列表中?
    • 我想在理解 OP 的问题时犯了一个错误。只需将 "Members": {"L": [members]} 链接到 "Members": members 就可以了。
    • 我们需要为每个要附加的字典项调用members["L"].append(<dictionary>)。在原始代码中,我们只在大括号内添加了多个字典。
    猜你喜欢
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多