首页 > 解决方案 > 如何在导入时动态映射列名

问题描述

这是我的情况,我从多个数据源导入到我的 json 后端。

映射文件将类似于下面的示例。所以问题是我如何才能有效地查找从这个 json 文件导入的映射,并在将数据导入我的后端时使用它。所以概念是将 2 个对象传递给我的函数,映射文件和保存来自供应商的数据的 json 对象。然后我必须使用映射和循环数据来创建一个对象/文档并在我的后端插入正确的映射。

{
    "vendor" : "ABCVendor",
    "version" : "2.01",
    "mappings" : [
        {   "fieldName" : "fName",
            "dbName" : "FirstName",
            "required" : true,
            "type" : "string"
        },
                {   "fieldName" : "mName",
            "dbName" : "MiddleName",
            "required" : false,
            "type" : "string"
        },
                {   "fieldName" : "lName",
            "dbName" : "LastName",
            "required" : true,
            "type" : "string"
        }
    
    ]
}

这是输入的样子

{
        "fname" : "Steve",
        "mname" : "T",
        "lname" : "Miller"
}

这里的广告是我想出去的

{
        "FirstName" : "Steve",
        "MiddleName" : "T",
        "LastName" : "Miller"
}

标签: javascriptnode.js

解决方案


你可以做这样的事情,如果插入总是相同的。

不过,这可能不是最高效的方法。

"use strict";
const fileConfig = {
    "vendor": "ABCVendor",
    "version": "2.01",
    "mappings": [
        {
            "fieldName": "fName",
            "dbName": "FirstName",
            "required": true,
            "type": "string"
        },
        {
            "fieldName": "mName",
            "dbName": "MiddleName",
            "required": false,
            "type": "string"
        },
        {
            "fieldName": "lName",
            "dbName": "LastName",
            "required": true,
            "type": "string"
        }
    ]
};
const funcInput = {
    "fName": "Steve",
    "mName": "T",
    "lName": "Miller"
};
function change(config, input) {
    const result = {};
    config.mappings.forEach((fe) => {
        result[fe.dbName] = input[fe.fieldName];
    });
    return result;
}

console.log(change(fileConfig, funcInput))


推荐阅读