【问题标题】:Json parsing and mapping keysJson解析和映射键
【发布时间】:2020-06-16 08:01:18
【问题描述】:

我正在尝试映射 json 以将其发送到另一个应用程序,该应用程序期望数据采用自己的格式,我使用的是 AWS Lambda,当触发事件时获取低于 json 的 GET,需要根据应用程序期望什么。但是密钥堆栈太大了,例如“详细信息”中的“ratePlan”中的“rateCode”,有将近 20000 个速率代码,例如“abc”,“xyz”,......这样映射不是一个好主意

if "rateCode" == "abc":
    application_two_dict["rate_code"] = 123

所以有更多的键,这些键具有大量的值。映射这些键的最佳方法是什么。这也需要以两种方式发生,例如当我们从应用程序 2 获取数据时,我们需要解析 json 并将键映射到应用程序可以理解的其他方式,反之亦然。




{
    "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",
                }]
            }
        }
    }   
}

应用 2 json

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

【问题讨论】:

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

标签: json python-3.x aws-lambda


【解决方案1】:

我会尝试以下方法: - 使用两个以rateCode为键的静态地图

{ "abc": "123", ...} 和 { "123": "abc", ...} 并使用它们从其他应用程序的 rateCode 值中获取值。

  • 使用数据库根据 app1 的值获取 app2 的 rateCode。 Dynamo 的延迟非常低,而且非常有效。

也许您可以更准确地描述这两个应用程序的 json 结构。

【讨论】:

  • 谢谢布莱斯。我仍在等待其他团队提供 app2 json。使用 Dynamo DB 是否需要将键值对存储为 app1 和 app2 键以及将数据从 app2 发送到 app1 时如何发生反向映射?
  • 例如 app1 json ` { "Details": { "123": [{ "quantity": 1, "ratePlan": { "rateCode": "abc", "DetailsList": [{ “CategoryCode”:“1234”,}]}}}}}`app 2 json`{user_details_code:123,数量:[1],rate_plan:{rate_code:“xyz”,category_code:“US_SAN”}}`
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多