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"); } }) }); Estoy tratando de obtener la clave del objeto obj JSON y compararlo con la ruta del archivo Array para poder insertar el valor en el archivo json creado
aquí usando fs estoy tratando de crear una carpeta que obtuve de la matriz
fs.writeFile(path.join(__dirname,file.filepath,"system.json"));mediante el cual creé la carpeta y el sistema de archivos.json en él y estoy tratando de comparar la clave del obj json y la ruta del archivo de la matriz y tratando de poner así
{ "2343192u4":{ id:"01", name:"linux file", location:"System config" }, "23438ufsdjh8":{ id:"02", name:"windows file", location:"System config" } } { "9058t05":{ no:"ct-01", refrence:"down-tPO-01" } }pero el problema es cuando hago esto
JSON.stringify(Object.values(obj)[0], null, 4)Obtengo el mismo resultado en cada archivo.
{ "2343192u4":{ id:"01", name:"linux file", location:"System config" }, "23438ufsdjh8":{ id:"02", name:"windows file", location:"System config" } } { "2343192u4":{ id:"01", name:"linux file", location:"System config" }, "23438ufsdjh8":{ id:"02", name:"windows file", location:"System config" } } aquí print hardware stack backupdir siempre se cambia y hay varios archivos más, ya que este es un nombre generado aleatoriamente por el sistema, por eso tengo que comparar y la clave del objeto y crear un directorio con este nombre
¿Cómo puedo empujarlos en diferentes carpetas diferentes con su respectivo valor?
Intenta cambiar
fs.writeFileSync(path.join(__dirname,file.filepath,"system.json"), JSON.stringify(Object.values(obj)[0], null, 4)) (que solo mira el primer valor de propiedad en obj ) para
fs.writeFileSync(path.join(__dirname,file.filepath,"system.json"), JSON.stringify(obj[key], null, 4)) que busca el objeto de propiedad en obj usando el valor key obtenido de la entrada de Array que se está procesando.
El uso de forEach en Object.keys(obj).forEach((key)=>{ evita que se detenga la búsqueda si se encuentra una ruta de archivo coincidente. Otra opción sería usar un bucle for of que salta si se ha fundar:
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; } } }); Además: evite usar los nombres de constructores globales como Array como nombres de variables; es un error que está a punto de ocurrir :-)