Javascript 如何修改JSON响应数组以在NodeJS中添加新键?
我有一个NodeJS函数,它返回以下JSON数组。它具有类型为Javascript 如何修改JSON响应数组以在NodeJS中添加新键?,javascript,node.js,json,collections,hashmap,Javascript,Node.js,Json,Collections,Hashmap,我有一个NodeJS函数,它返回以下JSON数组。它具有类型为1的所有错误: const data1 = [ { "ErrorType": "Error-1A", "Error": "wrong ip address for 1A", "SERVER_COUNT": 9 }, { "ErrorType": "Error-1B
1
的所有错误:
const data1 =
[
{
"ErrorType": "Error-1A",
"Error": "wrong ip address for 1A",
"SERVER_COUNT": 9
},
{
"ErrorType": "Error-1B",
"Error": "password incorrect for 1B",
"SERVER_COUNT": 2
},
....
]
对于类型为2
的所有错误,我有另一个JSON数组:
const data2 =
[
{
"ErrorType": "Error-2A",
"Error": "wrong data for 2A",
"SERVER_COUNT": 8
},
{
"ErrorType": "Error-2B",
"Error": "password incorrect for 2B",
"SERVER_COUNT": 3
},
....
]
对于3
类型的所有错误,我有另一个JSON数组:
const data3 =
[
{
"ErrorType": "Error-3A",
"Error": "wrong data for 3A",
"SERVER_COUNT": 1
},
{
"ErrorType": "Error-3B",
"Error": "password incorrect for 3C",
"SERVER_COUNT": 5
},
....
]
我想组合3个JSON数组data1
,data2
,data3
,最后的JSON对象应该如下所示:
{
"details1": {
"9": {
"ErrorType": "Error-1A",
"Error": "wrong ip address for 1A"
},
"2": {
"ErrorType": "Error-1B",
"Error": "password incorrect for 1B"
}
},
"details2": {
"8": {
"ErrorType": "Error-2A",
"Error": "wrong ip address for 2A"
},
"3": {
"ErrorType": "Error-2B",
"Error": "password incorrect for 2B"
}
},
"details3": {
"1": {
"ErrorType": "Error-3A",
"Error": "wrong ip address for 3A"
},
"5": {
"ErrorType": "Error-3B",
"Error": "password incorrect for 3B"
}
}
}
请注意,我想在最终响应中添加3个新键-details1
、details2
和details3
。
我还想取出SERVER\u COUNT
值并将其作为键
我已经添加了以下代码,但不确定是否要更新它以获得最终所需的json
let finalData = Object.assign({}, ...data1.map(({
SERVER_COUNT,
...rest
}) => ({
[SERVER_COUNT]: rest
})));
注意:只有3个主键,它们是硬编码的details1
,details2
,details13
JS pseudokode:
const数据1=
[
{
“错误类型”:“错误-1A”,
“错误”:“1A的ip地址错误”,
“服务器计数”:9
},
{
“错误类型”:“错误-1B”,
“错误”:“1B的密码不正确”,
“服务器计数”:2
}
]
常数数据2=
[
{
“ErrorType”:“Error-2A”,
“错误”:“2A的数据错误”,
“服务器计数”:8
},
{
“错误类型”:“错误-2B”,
“错误”:“2B的密码不正确”,
“服务器计数”:3
}
]
常数数据3=
[
{
“ErrorType”:“Error-3A”,
“错误”:“3A的数据错误”,
“服务器计数”:1
},
{
“ErrorType”:“Error-3B”,
“错误”:“3C密码不正确”,
“服务器计数”:5
}
]
console.log([data1,data2,data3].reduce((acc,cur,i)=>Object.assign(acc,{[“detailist”+i]:{…cur}),{}))
您可以将所有数据数组放入一个名为
all\u data
的数组中,然后使用该数组形成一个[detailsN,object]
条目数组。此处detailsN
表示外部对象的关键点,对象表示每个细节关键点的对象。将所有_数据映射到条目后,可以使用将其转换为对象
实体的对象组件可以通过将每个数据数组中的数据映射到[SERVER\u COUNT,obj]
条目来形成,然后可以将该条目称为object.fromEntries(),以将映射条目数组转换为对象
const data1=[{“ErrorType”:“Error-1A”,“Error”:“1A的ip地址错误”,“服务器计数”:9},{“ErrorType”:“Error-1B”,“Error”:“1B的密码错误”,“服务器计数”:2},];
const data2=[{“ErrorType”:“Error-2A”,“Error”:“2A的数据错误”,“服务器计数”:8},{“ErrorType”:“Error-2B”,“Error”:“2B的密码错误”,“服务器计数”:3},];
const data3=[{“ErrorType”:“Error-3A”,“Error”:“3A的数据错误”,“服务器计数”:1},{“ErrorType”:“Error-3B”,“Error”:“3C的密码不正确”,“服务器计数”:5},];
常量键=[“details1”、“details2”、“details3”];
const all_data=[data1,data2,data3];
const res=Object.fromEntries(所有数据.map((数据,i)=>[
键[i],
Object.fromEntries(data.map({SERVER\u COUNT,…r})=>[SERVER\u COUNT,r]))
]));
控制台日志(res)
循环数组元素,使用SERVER\u COUNT
属性作为键,将每个元素转换为对象属性
函数数据详细信息(数据){
让结果={};
forEach({ErrorType,Error,SERVER\u COUNT})=>result[SERVER\u COUNT]={ErrorType,Error});
返回结果;
}
常数数据1=
[
{
“错误类型”:“错误-1A”,
“错误”:“1A的ip地址错误”,
“服务器计数”:9
},
{
“错误类型”:“错误-1B”,
“错误”:“1B的密码不正确”,
“服务器计数”:2
},
];
常数数据2=
[
{
“ErrorType”:“Error-2A”,
“错误”:“2A的数据错误”,
“服务器计数”:8
},
{
“错误类型”:“错误-2B”,
“错误”:“2B的密码不正确”,
“服务器计数”:3
},
];
常数数据3=
[
{
“ErrorType”:“Error-3A”,
“错误”:“3A的数据错误”,
“服务器计数”:1
},
{
“ErrorType”:“Error-3B”,
“错误”:“3C密码不正确”,
“服务器计数”:5
},
];
让finalData={
详细信息1:dataToDetails(数据1),
详情2:数据详情(数据2),
详细信息3:dataToDetails(数据3)
};
console.log(finalData)代码>如果您具有类似myObj={}的对象结构,则可以添加键或属性,如:
myObj.myKeyOrProperty = 'The data here';
// or
myObj.['myKeyOrProperty'] = 'The data here';
您需要在请求/响应中对JSON进行序列化或反序列化
如果您有类似于对象数组的JSON响应,请使用:
array.push(myAwesomeObj-A);
array.push(myAwesomeObj-B);
array.push(myAwesomeObj-C);
etc...
当您具有所需的数据结构时,将以以下方式发出响应:
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
{
"myDataKey": ---your data must be here in a JSON string format---
}
预期输出为invalidAlso,这不是JSON,这些是包含对象的数组。预期结果应该是对象,而不是数组。不,您没有。当它应该是{}
对不起时,它周围仍然有[]
。现在添加了。您有很多输入。这会在哪里添加键,如详细信息:
,详细信息2:
,等等?这会怎么做?该键不会出现在cur
中的任何位置。如果您知道works是如何减少的,以及works对象是如何分配的,那么很明显。您可以在reduce by(acc,cur)=>({…acc,…cur})中重新应用此方法。。。这只是组合对象。我有一个服务器计数具有相同值的情况,在这种情况下,它不会显示所有ErrorType值const data1=[{“ErrorType”:“Error-1A”,“Error”:“1A的ip地址错误”,“服务器计数”:9},{“ErrorType”:“Error-1B”,“Error”:“1B的密码不正确”,“服务器计数”:9},];
对象密钥必须是唯一的。在这种情况下,您希望得到什么结果?{“details1”:{“9”:{“ErrorType”:“Error-1A”,“Error”:“1A的ip地址错误”},“9”:{“ErrorType”:“Error-1B”,“Error”:“密码错误”