Javascript 用JSON中的动态值替换键
在下面的JSON中,我想用alliance和env的动态值替换键xyz和abc,我通过下面的语句从表单中获得这些值,用下面的直接对象名称替换引号中的单词abc会给我一个错误。有什么办法可以做到这一点Javascript 用JSON中的动态值替换键,javascript,json,servicenow,Javascript,Json,Servicenow,在下面的JSON中,我想用alliance和env的动态值替换键xyz和abc,我通过下面的语句从表单中获得这些值,用下面的直接对象名称替换引号中的单词abc会给我一个错误。有什么办法可以做到这一点 var env = g_form.getValue('vpc_environment_type'); var alliance = g_form.getValue('alliance_business_unit'); var team = g_form.getVal`enter code here`
var env = g_form.getValue('vpc_environment_type');
var alliance = g_form.getValue('alliance_business_unit');
var team = g_form.getVal`enter code here`ue('alliance_segment_team_name_df_ingestion');
var project = g_form.getValue('project_name_gcp_df_ingestion_npe');
var requestBody = {
"format_version": "0.2.19",
"alliances": {
"xyz": {
"environments": {
"abc": {
"teams": {
"dna": {
"action": "edit",
"team": "dna",
"projects": {
"xxxx": {
"project": "xxxxx",
"cost_center": "0",
"custom_iam_policies": [],
"iam": {
"dev_group_email_name": "123",
"view_group_email_name": "456",
"sre_admin_group_email_name": "789"
},
"allowed_apis": [
"123",
"123"
],
"networks": {
"xxxxx": {
"flags": [
"VM"
],
"region": "123,
"preferred-suffix" : "123"
}
}
}
}
}
}
}
}
}
}
};
requestBody = new global.JSON().encode(requestBody);
console.log(requestBody);
试试这样的。请注意,不能仅重命名JavaScript对象中的键,需要使用新名称添加新键,如果不需要,则删除旧键。还要注意,删除旧密钥时,如果数据发生变化,可能会删除新密钥中的值
var alliance = g_form.getValue('alliance_business_unit');
requestBody.alliances[alliance] = requestBody.alliances.xyz;
这将在alliance下添加新密钥,密钥名从g_form.getValue('alliance_business_unit')返回代码>
同样地,对env也要这样做
动态赋值是这样做的
object[variable] = value;
如果您的变量有值test,那么您将有这样一个对象
{test: 'your value' }
Stringify>Replace>Convert to JSON
您需要用所需的键替换字符串:Dynamic1和Dynamic2
requestBody = JSON.parse(JSON.stringify(requestBody).replace("\"xyz\"","\"Dynamic1\"").replace("\"abc\"","\"Dynamic2\""));
更新:
可以以这种方式将变量用作键
var newKey1 = "DynamicKey1";
requestBody.alliances[newKey1] = requestBody.alliances.xyz;
var newKey2 = "DynamicKey2";
requestBody.alliances[newKey1].environments[newKey2] = requestBody.alliances[newKey1].environments.abc;
这样的事情可能吗?我不想替换任何东西,我希望它从一开始就是这样,我发布的JSON就是一个例子,我想用变量替换一些键,这样我就可以为用户提交的每个表单获得不同的JSON负载。这样的事情可能吗?我不想替换任何东西,我希望它从一开始就是这样,我发布的JSON就是一个例子,我想用变量替换一些键,这样我就可以为用户提交的每个表单获得不同的JSON负载。object[variable]=value
//如果您的变量有值test,那么您将有这样一个对象{test:'your value'}
我对requestBody.alliances[alliances]=requestBody.alliances.xyz感到困惑;难道不是相反吗?我们不是要用可变联盟取代xyz吗?你能解释一下吗?那就是将xyz中的现有值分配给新创建的键。这样的事情可能吗?我不想替换任何东西,我希望从一开始就是这样,我发布的JSON就是一个例子,我想用变量替换一些键,这样我就可以为用户提交的每个表单获得不同的JSON负载。请参阅更新的答案