Javascript 替换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

我正在寻找一种在不替换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
    }
  ]
}
我设法得到变量中“任务”括号内的所有内容。 我目前的问题是,我只需要替换括号内的内容,而不影响文件的其他部分

这是我检索“任务”数据的代码:

函数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
    }]
}