Python将属性映射到多种其他格式

时间:2017-08-01 20:42:17

标签: python json

我们目前正在建立内部服务来管理我们的用户。我们的挑战是同步到具有不同格式的多个第三方系统(尽管全部采用JSON格式)。

作为示例,我们的用户架构可能如下所示

{
"title": "User Schema",
"type": "object",
"properties": {
    "firstName": {
        "type": "string"
    },
    "lastName": {
        "type": "string"
    },
    "email": {
        "type": "string"
    }
"required": ["firstName", "lastName"]
}

稍后我们需要为可能包含全部或部分字段的其他几家供应商转换这组数据

e.g。供应商1

{
    "first_name": {
        "type": "string"
    },
    "last_name": {
        "type": "string"
    },
}

e.g。供应商2

{
    "fname": {
        "type": "string"
    },
    "lname": {
        "type": "string"
    },
}

我们需要将firstName和lastName映射到每个供应商的上述每种替代格式。我觉得我们应该能够将这些数据推送到JSON模式中,并且可以很容易地使用python进行转换。

它基本上只是数据转换。 Python中是否有可以帮助转换的标准格式或包?

我认为下面的内容将是一个起点但不确定。

{
"title": "User Schema",
"type": "object",
"properties": {
    "firstName": {
        "type": "string",
        "vendorMap" {
           "vendor1": "first_name",
           "vendor2": "last_name"
        }
    },
    "lastName": {
        "type": "string"
    },
    "email": {
        "type": "string"
    }
"required": ["firstName", "lastName"]
}

1 个答案:

答案 0 :(得分:0)

您可以为每个供应商及其映射创建字典:

transformers = {'v2': {
                    'fname': 'first_name', 
                    'lname': 'last_name'}}

vendor = 'v2'
# Sample data from vendor 'v2'.
v2 = {
    "fname": "John",
    "lname": "Smith",
    "email": "john@example.com",
    "random": "randomly keyed data"
}

# Convert data into standard form.
transformed_data = {
    transformers[vendor].get(k, k) if vendor in transformers else k: v 
    for k, v in v2.iteritems()}

>>> transformed_data
{'email': 'john@example.com',
 'first_name': 'John',
 'last_name': 'Smith',
 'random': 'randomly keyed data'}

如果订购很重要,请考虑使用OrderedDict