Javascript 合并json数组并生成键值对

Javascript 合并json数组并生成键值对,javascript,node.js,json,Javascript,Node.js,Json,我正在从S3 bucket读取后端的3个json文件,并获得以下格式的数据 readJSON = async (params) => { const data = (await (S3.getObject(params).promise())).Body.toString('utf-8'); return JSON.parse(data); } 参数将有bucket name和key(文件名) 输出json数据如下所示 [ { "

我正在从S3 bucket读取后端的3个json文件,并获得以下格式的数据

readJSON  = async (params) => { 

    const data = (await (S3.getObject(params).promise())).Body.toString('utf-8'); 

    return JSON.parse(data); 

}
参数将有bucket name和key(文件名)

输出json数据如下所示

[
   {
      "awsregion":"ap-southeast-2"
   },
   {
      "awsregion":"us-west-1"
   },
   {
      "awsregion":"eu-north-1"
   },
   {
      "awsregion":"ap-northeast-1"
   },
   {
      "awsregion":"ap-south-1"
   }
][
   {
      "accountID":22180670435
   },
   {
      "accountID":681582023110
   },
   {
      "accountID":389803793257
   },
   {
      "accountID":88588205515
   },
   {
      "accountID":413557442353
   }
]
我想将它合并为一个json对象。其思想是使用前端的相关键访问这些json对象,并进行一些格式化。 因此,我正在考虑以以下格式将其合并到单个json对象中

var data = 
{
   "awsregion":[
      {
         "awsregion":"ap-southeast-2"
      },
      {
         "awsregion":"us-west-1"
      },
      {
         "awsregion":"eu-north-1"
      },
      {
         "awsregion":"ap-northeast-1"
      },
      {
         "awsregion":"ap-south-1"
      }
   ],
   "accountID":[
      {
         "accountID":22180670435
      },
      {
         "accountID":681582023110
      },
      {
         "accountID":389803793257
      },
      {
         "accountID":88588205515
      },
      {
         "accountID":413557442353
      }
   ]
}
现在,我将能够访问它作为
data.awsregion和data.accountID,它们将作为数组返回。在javascript/nodejs中如何实现这一点首先将数组展平,使对象位于一个数组中,并在其上使用reduce

按对象键分组。检查键是否存在,如果存在,则将对象添加到现有数组;如果不实例化该对象属性的数组,则将第一项添加到该数组

因为您有多个数组,所以需要一个数组来包装其他数组,以使输出json有效

const list=[
[{
“awsregion”:“ap-东南-2”
},
{
“awsregion”:“us-west-1”
},
{
“awsregion”:“eu-north-1”
},
{
“awsregion”:“ap-northeast-1”
},
{
“awsregion”:“ap-south-1”
}
],
[{
“帐户ID”:22180670435
},
{
“帐户ID”:68158023110
},
{
“帐户ID”:389803793257
},
{
“帐户ID”:88588205515
},
{
“帐户ID”:413557442353
}
]
]
const result=list.flat().reduce((acc,x)=>{
const key=Object.keys(x)[0];
if(附件[键]){
acc[键]=[…acc[键],x];
}否则{
acc[键]=[x]
}
返回acc;
}, {})

console.log(result)
您需要分组,请查看一些无效JSON的示例。如果您的输入数组总是采用相同的格式,例如第一个元素是
awsregion
的嵌套数组,第二个元素是
accountID
的嵌套数组,那么您需要的就是
var data={“awsregion”这样简单:original[0],“accountID”:original[1]}