如何修改 JSON 响应数组以在 NodeJS 中添加新键?
How to modify JSON response array to add new keys in NodeJS?
我有一个返回以下 JSON 数组的 NodeJS 函数。它包含 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
},
....
]
我有另一个 JSON 数组用于所有 2
:
类型的错误
const data2 =
[
{
"ErrorType": "Error-2A",
"Error": "wrong data for 2A",
"SERVER_COUNT": 8
},
{
"ErrorType": "Error-2B",
"Error": "password incorrect for 2B",
"SERVER_COUNT": 3
},
....
]
我有另一个 JSON 数组用于所有 3
:
类型的错误
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_COUNT
这个值取出来做成key
我添加了以下代码,但不确定是否更新它以获得最终所需的 json
let finalData = Object.assign({}, ...data1.map(({
SERVER_COUNT,
...rest
}) => ({
[SERVER_COUNT]: rest
})));
注意:只有 3 个主键,并且是硬编码的 details1
、details2
、details13
JS伪代码:.
- 将所有 joson 解析为对象
- Object.assigne 或 {...obj1, ...objt2};
- 将对象转换为 json
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
}
]
const data2 =
[
{
"ErrorType": "Error-2A",
"Error": "wrong data for 2A",
"SERVER_COUNT": 8
},
{
"ErrorType": "Error-2B",
"Error": "password incorrect for 2B",
"SERVER_COUNT": 3
}
]
const data3 =
[
{
"ErrorType": "Error-3A",
"Error": "wrong data for 3A",
"SERVER_COUNT": 1
},
{
"ErrorType": "Error-3B",
"Error": "password incorrect for 3C",
"SERVER_COUNT": 5
}
]
console.log([data1, data2, data3].reduce((acc, cur, i) => Object.assign(acc, {["detailist" + i]: {...cur}}), {}))
您可以将所有数据数组放入一个名为 all_data
的数组中,然后您可以使用 .map()
on to form an array of [detailsN, object]
entries. Here detailsN
represents your key for your outer object and the object represents the object for each detail key. Once you have mapped your all_data to entries, you can use Object.fromEntries() 将其转换为一个对象。
可以通过将每个数据数组中的数据映射到 [SERVER_COUNT, obj]
条目来形成整体的对象组件,然后可以调用 Object.fromEntries() 将映射条目的数组转换为一个对象。
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 }, ];
const data2 = [ { "ErrorType": "Error-2A", "Error": "wrong data for 2A", "SERVER_COUNT": 8 }, { "ErrorType": "Error-2B", "Error": "password incorrect for 2B", "SERVER_COUNT": 3 }, ];
const data3 = [ { "ErrorType": "Error-3A", "Error": "wrong data for 3A", "SERVER_COUNT": 1 }, { "ErrorType": "Error-3B", "Error": "password incorrect for 3C", "SERVER_COUNT": 5 }, ];
const keys = ["details1", "details2", "details3"];
const all_data = [data1, data2, data3];
const res = Object.fromEntries(all_data.map((data, i) => [
keys[i],
Object.fromEntries(data.map(({SERVER_COUNT, ...r}) => [SERVER_COUNT, r]))
]));
console.log(res);
遍历数组元素,使用 SERVER_COUNT
属性 作为键将每个元素变成一个对象 属性。
function dataToDetails (data) {
let result = {};
data.forEach(({ErrorType, Error, SERVER_COUNT}) => result[SERVER_COUNT] = {ErrorType, Error});
return result;
}
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
},
];
const data2 =
[
{
"ErrorType": "Error-2A",
"Error": "wrong data for 2A",
"SERVER_COUNT": 8
},
{
"ErrorType": "Error-2B",
"Error": "password incorrect for 2B",
"SERVER_COUNT": 3
},
];
const data3 =
[
{
"ErrorType": "Error-3A",
"Error": "wrong data for 3A",
"SERVER_COUNT": 1
},
{
"ErrorType": "Error-3B",
"Error": "password incorrect for 3C",
"SERVER_COUNT": 5
},
];
let finalData = {
details1: dataToDetails(data1),
details2: dataToDetails(data2),
details3: dataToDetails(data3)
};
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---
}
我有一个返回以下 JSON 数组的 NodeJS 函数。它包含 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
},
....
]
我有另一个 JSON 数组用于所有 2
:
const data2 =
[
{
"ErrorType": "Error-2A",
"Error": "wrong data for 2A",
"SERVER_COUNT": 8
},
{
"ErrorType": "Error-2B",
"Error": "password incorrect for 2B",
"SERVER_COUNT": 3
},
....
]
我有另一个 JSON 数组用于所有 3
:
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_COUNT
这个值取出来做成key
我添加了以下代码,但不确定是否更新它以获得最终所需的 json
let finalData = Object.assign({}, ...data1.map(({
SERVER_COUNT,
...rest
}) => ({
[SERVER_COUNT]: rest
})));
注意:只有 3 个主键,并且是硬编码的 details1
、details2
、details13
JS伪代码:.
- 将所有 joson 解析为对象
- Object.assigne 或 {...obj1, ...objt2};
- 将对象转换为 json
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
}
]
const data2 =
[
{
"ErrorType": "Error-2A",
"Error": "wrong data for 2A",
"SERVER_COUNT": 8
},
{
"ErrorType": "Error-2B",
"Error": "password incorrect for 2B",
"SERVER_COUNT": 3
}
]
const data3 =
[
{
"ErrorType": "Error-3A",
"Error": "wrong data for 3A",
"SERVER_COUNT": 1
},
{
"ErrorType": "Error-3B",
"Error": "password incorrect for 3C",
"SERVER_COUNT": 5
}
]
console.log([data1, data2, data3].reduce((acc, cur, i) => Object.assign(acc, {["detailist" + i]: {...cur}}), {}))
您可以将所有数据数组放入一个名为 all_data
的数组中,然后您可以使用 .map()
on to form an array of [detailsN, object]
entries. Here detailsN
represents your key for your outer object and the object represents the object for each detail key. Once you have mapped your all_data to entries, you can use Object.fromEntries() 将其转换为一个对象。
可以通过将每个数据数组中的数据映射到 [SERVER_COUNT, obj]
条目来形成整体的对象组件,然后可以调用 Object.fromEntries() 将映射条目的数组转换为一个对象。
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 }, ];
const data2 = [ { "ErrorType": "Error-2A", "Error": "wrong data for 2A", "SERVER_COUNT": 8 }, { "ErrorType": "Error-2B", "Error": "password incorrect for 2B", "SERVER_COUNT": 3 }, ];
const data3 = [ { "ErrorType": "Error-3A", "Error": "wrong data for 3A", "SERVER_COUNT": 1 }, { "ErrorType": "Error-3B", "Error": "password incorrect for 3C", "SERVER_COUNT": 5 }, ];
const keys = ["details1", "details2", "details3"];
const all_data = [data1, data2, data3];
const res = Object.fromEntries(all_data.map((data, i) => [
keys[i],
Object.fromEntries(data.map(({SERVER_COUNT, ...r}) => [SERVER_COUNT, r]))
]));
console.log(res);
遍历数组元素,使用 SERVER_COUNT
属性 作为键将每个元素变成一个对象 属性。
function dataToDetails (data) {
let result = {};
data.forEach(({ErrorType, Error, SERVER_COUNT}) => result[SERVER_COUNT] = {ErrorType, Error});
return result;
}
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
},
];
const data2 =
[
{
"ErrorType": "Error-2A",
"Error": "wrong data for 2A",
"SERVER_COUNT": 8
},
{
"ErrorType": "Error-2B",
"Error": "password incorrect for 2B",
"SERVER_COUNT": 3
},
];
const data3 =
[
{
"ErrorType": "Error-3A",
"Error": "wrong data for 3A",
"SERVER_COUNT": 1
},
{
"ErrorType": "Error-3B",
"Error": "password incorrect for 3C",
"SERVER_COUNT": 5
},
];
let finalData = {
details1: dataToDetails(data1),
details2: dataToDetails(data2),
details3: dataToDetails(data3)
};
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---
}