如何从对象创建JSON文件
我目前正在寻找一种方法来创建一个JSON文件(versions.json),其中包含一个键和JavaScript中对象的值。要创建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');
});
但是这会产生与对象看起来相同的结果。那么我怎样才能实现目标呢?
回答如下:使用Array#reduce和regex。这将剥离文件版本并将其作为对象的键添加,并忽略任何没有版本号的内容。它还会检查版本后面是否有_
字符。
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);