JSON解析和键映射

3
我正在尝试将JSON映射到另一个应用程序,该应用程序期望以自己的格式接收数据。我正在使用AWS Lambda,当事件被触发时,会获取以下JSON,需要根据应用程序的期望进行解析和映射。但是关键堆栈非常大,例如在“细节”中的“ratePlan”中的“rateCode”,有近20000个费率代码,如“abc”,“xyz”等。这不是一个很好的映射方式。
if "rateCode" == "abc":
    application_two_dict["rate_code"] = 123

因此,有许多键具有大量的值。 最好的映射方式是什么?还需要以两种方式进行,例如当我们从应用程序2获得数据时,我们需要解析JSON并映射密钥,以便应用程序1可以理解,反之亦然。




{
    "customer": {
        "firstName": "john",
        "lastName": "doe",
        "email": "john.doe@test.com",
        "mailingAddress": {
            "address1": "123 N 1st st",
            "address2": "789",
            "countryCode": "USA",
            "stateCode": "AZ",
            "city": "Phoenix",
            "postalCode": "34567"
        },
        "telephoneNumber": {
            "telephoneNumber": "1235456789"
        }
    },
    "paymentAccount": {
        "firstName": "john",
        "lastName": "doe",
        "paymentAccountType": "VA",
        "expirationDate": "2021-05-31",
        "billingAddress": {
            "address1": "1234 N 1st st",
            "address2": "435",
            "city": "Phoenix",
            "countryCode": "USA",
            "postalCode": "213445",
            "stateCode": "AZ"
        }
    },
    "Details": {
        "123": [{
            "quantity": 1,
            "ratePlan": {
                "rateCode": "abc",
                "DetailsList": [{
                    "CategoryCode": "1234",
                }]
            }
    }
}

我仍然没有app2的json精确格式

示例json

例如

app1的json

{
 "Details": {
        "123": [{
            "quantity": 1,
            "ratePlan": {
                "rateCode": "abc",
                "DetailsList": [{
                    "CategoryCode": "1234",
                }]
            }
        }
    }   
}

app 2 json

{
    user_details_code : 123,
    quantity : [1],
    rate_plan : {
        rate_code: "xyz",
        category_code : "US_SAN"
    }
}


方法1:创建一个带有分区键(例如命名为app1rateCode)的表,其中包含app1 rateCode值。将app2 rateCode存储在表中,作为名为app2rateCode的属性。创建一个GSI,并使用app2rateCode属性作为索引的分区键。这样,您就可以查询。 - Brice Miramont
方法2(我更喜欢的): 创建一个带有分区键(例如命名为 rateCode)的表,其中包含 app1 和 app2 的 rateCode 值,还有一个排序键(例如命名为 app),其中包含静态值(仅为“app1”和“app2”)。然后,您可以将 rateCode 存储在一个属性中,您可以命名为 OtherRateCode。 您可以使用分区键查询 rateCode,并使用排序键指定您要获取相应代码的 app。 - Brice Miramont
1个回答

3
我会尝试以下方法: - 使用两个静态映射,以rateCode作为键

{ "abc": "123", ...}和{ "123": "abc", ...},并使用它们从另一个应用程序获得rateCode值。

  • 使用数据库根据app1的值获取app2的rateCode。 Dynamo具有非常低的延迟,并且可以非常有效。
也许您可以更精确地描述两个应用程序的JSON结构。

谢谢Brice。我还在等待其他团队提供app2的json。使用Dynamo DB,我需要将键值对存储为app1和app2键,当从app2发送数据到app1时,反向映射是如何发生的? - michael
应用程序1 JSON{ "详细信息": { "123": [{ "数量": 1, "费率计划": { "费率代码": "abc", "详细列表": [{ "类别代码": "1234", }] } } } }应用程序2 JSON` { 用户详细信息代码 : 123, 数量 : [1], 费率计划 : { 费率代码: "xyz", 类别代码 : "US_SAN" } }` - michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接