Javascript 如何修改JSON响应数组以在NodeJS中添加新键?

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

我有一个NodeJS函数,它返回以下JSON数组。它具有类型为
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:

  • 将所有joson解析为对象
  • Object.assign或{…obj1,…objt2}
  • 将对象转换为json
  • 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”:“密码错误”