将 JSON 值保存在 Javascript/node js 中提供的文件夹中

save JSON value in provided folder in Javascript / node js

let obj={
 print:{
   "2343192u4":{
     id:"01",
     name:"linux file",
     location:"System config"
    },
   "23438ufsdjh8":{
     id:"02",
     name:"windows file",
     location:"System config"
   }
 },
 hardware:{
   "9058t05":{
     no:"ct-01",
     refrence:"down-tPO-01"
    }
 },
 stack:{
   "345t5fdfve":{
     option1:"prefer first lost",
     failure:"run backup"
    }
 },
 backupdir:{
   "cjksder8982w":{
   files:"config file.json",
   execute:"run after failure"
   }
 }
};


let Array=[{
  filepath:"print"
 },
 {
  filepath:"hardware"
 },
 {
  filepath:"stack"
 },
 {
  filepath:"backupdir"
 },
];

Array.map((file)=>{
//console.log(file.filepath)
Object.keys(obj).forEach((key)=>{
 
 if(key===file.filepath){
// fs.writeFile(path.join(__dirname,file.filepath,"system.json"), JSON.stringify(Object.values(obj)[0], null, 4))

console.log("yes");
 }
})
});

我正在尝试从 obj JSON 对象中获取密钥并将其与数组文件路径进行比较,以便我可以将值推送到创建的 json 文件

我在这里通过使用 fs 尝试创建从数组中获得的文件夹

fs.writeFile(path.join(__dirname,file.filepath,"system.json"));

我在其中创建了文件夹和文件 system.json,我正在尝试比较对象 json 中的键和数组中的文件路径 并尝试像这样

print/system.json

{
   "2343192u4":{
     id:"01",
     name:"linux file",
     location:"System config"
    },
   "23438ufsdjh8":{
     id:"02",
     name:"windows file",
     location:"System config"
   }
 }

hardware/system.json

{
   "9058t05":{
     no:"ct-01",
     refrence:"down-tPO-01"
   }
}

等等...

但问题是我这样做的时候

JSON.stringify(Object.values(obj)[0], null, 4)

我在每个文件中得到相同的输出

print/system.json

{
   "2343192u4":{
     id:"01",
     name:"linux file",
     location:"System config"
    },
   "23438ufsdjh8":{
     id:"02",
     name:"windows file",
     location:"System config"
   }
 }

hardware/system.json

{
   "2343192u4":{
     id:"01",
     name:"linux file",
     location:"System config"
    },
   "23438ufsdjh8":{
     id:"02",
     name:"windows file",
     location:"System config"
   }
 }

等等...

这里 print hardware stack backupdir 总是会被更改,并且还有多个文件,因为这是系统随机生成的名称,这就是为什么我必须比较和对象中的密钥并创建这个名称的目录

如何将它们推送到具有各自值的不同文件夹中

尝试改变

fs.writeFileSync(path.join(__dirname,file.filepath,"system.json"),
   JSON.stringify(Object.values(obj)[0], null, 4))

(仅查看 obj 中的第一个 属性 值)到

fs.writeFileSync(path.join(__dirname,file.filepath,"system.json"),
 JSON.stringify(obj[key], null, 4))

使用从正在处理的 Array 条目中获得的 key 值在 obj 中查找 属性 对象。

Object.keys(obj).forEach((key)=>{ 中使用 forEach 可防止在找到匹配的文件路径时停止搜索。另一种选择是使用 for of 循环,如果找到文件名,该循环就会中断:

Array.forEach((file)=>{
  for( let key of Object.keys(obj)) { 
    if(key===file.filepath) {
      fs.writeFileSync(path.join(__dirname,file.filepath,"system.json"),
        JSON.stringify(obj[key], null, 4)); 
      break;      
    }
  }
});

此外:避免使用 Array 等全局构造函数的名称作为变量名 - 这是一个等待发生的错误:-)