Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何更改json文件中的对象属性_Node.js_Json_Fs - Fatal编程技术网

Node.js 如何更改json文件中的对象属性

Node.js 如何更改json文件中的对象属性,node.js,json,fs,Node.js,Json,Fs,我有一个巨大的JSON文件,名为data.JSON,其中填充了具有相同属性的对象。 对象的示例如下所示: { "directory": "directory_here", "posted": false, "date": null } 在我的脚本中,如果posted为false,我将使用fs.readFile读取data.json文件;如果posted为false,则运行一些函数,然

我有一个巨大的JSON文件,名为data.JSON,其中填充了具有相同属性的对象。 对象的示例如下所示:

  {
    "directory": "directory_here",
    "posted": false,
    "date": null
  }

在我的脚本中,如果posted为false,我将使用fs.readFile读取data.json文件;如果posted为false,则运行一些函数,然后将posted更改为true,并将date从null更改为当前日期。因此,我需要更改data.json文件中的属性。我该怎么做呢?

这里
arr
是对象数组

arr.forEach((obj)=>{
  if(!obj.posted) obj.posted = true;
  if(!obj.date) obj.date = new Date()
})

除了少数病理情况外,您不能直接编辑JSON文本文件的内容。相反,您需要(a)读取修改写入数据,或者(b)切换到允许就地编辑的不同存储格式

如果您(必须)坚持使用JSON,那么您有两个主要选择:

  • 分块读取文件,边读边解析为JSON。当您获得一个完整的对象时,根据需要修改它,然后将其写入一个新文件。读取整个文件并写入所有对象后,可以使用新创建的文件替换原始文件

  • 读取整个文件并将其解析为对象数组。对所有对象进行必要的更改,然后将整个数组(JSON格式)写入原始文件的顶部。(或者,为了额外的安全性,如果没有问题,您可以写入新文件并替换原始文件)

  • 第二种方法可能更容易编写,但会消耗更多内存


    一个可能的替代方案(我怀疑在您的情况下不合适)是切换到允许就地编辑的存储格式。这可能是一个固定记录长度记录的文件,或类似SQLite数据库的文件。

    所有这些对象是否都在数组中?是的,它们在一个数组中,我可以直接在json文件中编辑对象吗?可以,但为此,您必须使用文件系统读取文件并执行其他操作。