需要将键映射到 JSON 正文中的参数



我需要在正文中向HTTP API发送一些JSON,例如:

var body = {
'param1': 'param1 value',
'param2': 'param2 value',
'param3': 'param3 value',
'param4': 'param4 value',
'param5': 'param5 value',
'param6': 'param6 value'
};

但是我必须构建的来源是

var datasource = {
'x4001': 'param1 value',
'jd5jj': 'param2 value',
'mmmmmoose': 'param3 value',
'simple': 'param4 value',
'crayonx3': 'param5 value',
'hubbabubba': 'param6 value'
};

必须有一个快速的 jQuery 替换/映射函数来从数据源 JSON 创建我的"body"变量 - 以便"x4001"变成"param1","jd5jj"变成"param2",等等,等等,以获得我渴望的身体?

在我看到的其他答案中,我看到类似的东西:

function renameProperty(obj, fromKey, toKey) {
obj[toKey] = obj[fromKey];
delete obj[fromKey];
}
addObjectResponse.forEach(obj => renameProperty(obj, 'SP02', 'O2'));

但是我的JavaScript/jQuery就是不理解任何包含=>的内容- (看起来像C#中的LINQ语句(。

所以 - 要么我使用了错误的 jQuery,要么我需要不同的解决方案?

由于您要重命名datasource中的所有键,因此最简单的方法是定义一个"键映射"并使用它来从旧名称中查找新名称:

var keymap = {
x4001: "param1",
jd5jj: "param2",
mmmmmoose: "param3",
simple: "param4",
crayonx3: "param5",
hubbabubba: "param6"
};
var datasource = {
x4001: "param1 value",
jd5jj: "param2 value",
mmmmmoose: "param3 value",
simple: "param4 value",
crayonx3: "param5 value",
hubbabubba: "param6 value"
};
var body = {};
for (var key in datasource) 
body[keymap[key]] = datasource[key];
console.log(body);

您可以将JSON.stringify()String.prototype.replace()RegExp/"([wd])+"(?=:)/g一起使用

var n = 0;
var datasource = {
'x4001': 'param1 value',
'jd5jj': 'param2 value',
'mmmmmoose': 'param3 value',
'simple': 'param4 value',
'crayonx3': 'param5 value',
'hubbabubba': 'param6 value'
};
var body = JSON.parse(
JSON.stringify(datasource)
.replace(/"([wd]+)"(?=:)/g, function(match) {
return `"param${++n}"`
})
);
console.log(body);

var n = 0;
var arr = ["a", "b", "c", "d", "e", "f"];
var datasource = {
'x4001': 'param1 value',
'jd5jj': 'param2 value',
'mmmmmoose': 'param3 value',
'simple': 'param4 value',
'crayonx3': 'param5 value',
'hubbabubba': 'param6 value'
};
var body = JSON.parse(
JSON.stringify(datasource)
.replace(/"([wd]+)"(?=:)/g, function(match) {
return `"${arr[n++]}"`
})
);
console.log(body);

最新更新