如何从对象创建JSON文件

时间:2019-02-12 17:19:29

标签: javascript node.js json

我目前正在寻找一种通过JavaScript中的对象使用键和值创建JSON文件(versions.json)的方法。要创建JSON文件,请在此处创建该对象:

["V1_config-interfaces.json","V2_config-interfaces.json","V3_config-interfaces.json","versions.json"]

我现在需要以某种方式在此对象上循环,并检查当前文件是否不是versions.json,因为这是已创建的文件。

JSON文件必须如下所示:

{
    "V1": "V1_config-interfaces.json",
    "V2": "V2_config-interfaces.json",
    "V3": "V3_config-interfaces.json"
}

因此,密钥始终是下划线之前的版本号。我尝试过的是这里:

const fs = require('fs');
const interfaces = fs.readdirSync('./src/interfaces/');

fs.writeFile('./src/interfaces/versions.json', JSON.stringify(interfaces), (err) => {
    if (err) throw err;
    console.log('versions.js successfully created');
});

但这会产生与对象外观相同的结果。那我怎么能达到目标呢?

1 个答案:

答案 0 :(得分:2)

使用Array#reduce和正则表达式。这会剥离文件版本,并将其作为键添加到您的对象,并忽略所有没有版本号的文件。它还会在紧随其后的版本中检查该版本是否具有_字符。

const data = ["V1_config-interfaces.json","V2_config-interfaces.json","V3_config-interfaces.json","versions.json", "V4shouldntwork.json", "shouldntwork_V5_.json", "V123_shouldwork.json"];

const res = data.reduce((a,v)=>{
  const version = v.match(/^V[1-9]+(?=_)/);
  if(version === null) return a;
  a[version.shift()] = v;
  return a;
}, {});

console.log(res);