Javascript 替换JSON文件中的整个数据块
我正在寻找一种在不替换JSON文件另一部分的情况下替换JSON文件中大量数据的方法:Javascript 替换JSON文件中的整个数据块,javascript,node.js,json,express,Javascript,Node.js,Json,Express,我正在寻找一种在不替换JSON文件另一部分的情况下替换JSON文件中大量数据的方法: { "task": [ { "id": 5, "title": "dave", "description": "test" }, { "id": 6, "title": "fddsfsd", "description": "fsdfsd" }, { "id": 7, "ti
{
"task": [
{
"id": 5,
"title": "dave",
"description": "test"
},
{
"id": 6,
"title": "fddsfsd",
"description": "fsdfsd"
},
{
"id": 7,
"title": "fddsfssdfsdfd",
"description": "fsdfsd"
},
{
"id": 8,
"title": "fddsfssdfsdfd",
"description": "fsdfsd"
}
],
"compteur": [
{
"id": 8
}
]
}
我设法得到变量中“任务”括号内的所有内容。
我目前的问题是,我只需要替换括号内的内容,而不影响文件的其他部分
这是我检索“任务”数据的代码:
函数RemoveNode(idToDelete){
返回jsonData.task.filter(函数(emp){
if(emp.id==idToDelete){
返回false;
}
返回true;
});
}
var newData=RemoveNode(idToDelete);
arr1=JSON.stringify(newData,null,4);
控制台日志(“arr1”,arr1);
console.log为我提供了:
arr1 [
{
"id": 5,
"title": "dave",
"description": "test"
},
{
"id": 6,
"title": "fddsfsd",
"description": "fsdfsd"
},
{
"id": 8,
"title": "fddsfssdfsdfd",
"description": "fsdfsd"
}
]
实际上,我需要在原始JSON文件中替换它,但我完全不知道如何实现这一点。您可以使用spread运算符,这将用新的过滤数据覆盖任务数据
函数RemoveNode(idToDelete){
返回jsonData.task.filter(函数(emp){
if(emp.id==idToDelete){
返回false;
}
返回true;
});
}
var newData=RemoveNode(idToDelete);
var updatedJSONData={…jsonData,任务:newData};
您也可以就地执行此操作,使用forEach
而不是filter
,这在内存方面更有效
函数RemoveNode(idToDelete){
jsonData.task.forEach((t,index)=>{
if(t.id==idToDelete){
jsonData.task.splice(索引1);
}
});
}
< /代码> 如果您的JSON文件不太大,您可以考虑更改JS对象中的任务数组(一旦您读取或导入到程序中),然后重新编写JSON文件。
程序运行前的JSON文件:
{
"task": [
{
"id": 5,
"title": "dave",
"description": "test"
},
{
"id": 6,
"title": "fddsfsd",
"description": "fsdfsd"
},
{
"id": 7,
"title": "fddsfssdfsdfd",
"description": "fsdfsd"
},
{
"id": 8,
"title": "fddsfssdfsdfd",
"description": "fsdfsd"
}
],
"compteur": [
{
"id": 8
}
]
}
假设我们要删除id为6的任务对象。守则:
const myFileContents = require('./myFile.json');
const fs = require('fs');
const removeIdFromTasks = (taskList,idToRemove) => {
return taskList.filter(task => task.id!=idToRemove);
}
const writeJsonFile = (fileName,content) => {
fs.writeFile(fileName,content,(err) => {
if(err){
console.error(`Error in writing json file: ${e.message}`);
} else {
console.log(`File written`);
}
})
}
myFileContents.task = removeIdFromTasks(myFileContents.task,6);
writeJsonFile(`myFile.json`,JSON.stringify(myFileContents));
执行后的同一文件:
{
"task": [
{
"id": 5,
"title": "dave",
"description": "test"
},
{
"id": 7,
"title": "fddsfssdfsdfd",
"description": "fsdfsd"
},
{
"id": 8,
"title": "fddsfssdfsdfd",
"description": "fsdfsd"
}],
"compteur": [
{
"id": 8
}]
}