微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在节点js中搜索和更新json文件中的值

如何解决在节点js中搜索和更新json文件中的值

我试图在 nodejs 中创建一个键值对数据存储,我试图在其中使用 json 文件作为数据库。现在我正在尝试读取键的特定值并更新或删除它。

例如(虚拟数据)

{
   name: 'my name',no:12345,course : {
      name: 'cname',id: 'cid'
   }
}

现在我想把它改成

{
   name: 'my name',course : {
      name: 'cname1',id: 'cid1'
   },fees: {
      primaryFee: 1000,donation: 100,}
}

甚至删除课程密钥及其值。

我想到的一种实现方法是读取整个文件并将其存储在一个变量中(json 解析)。并更新该变量中的值并将整个数据写入文件

但这并不高效,因为它每次更新时都会读取和写入整个数据。

那么是否有任何有效的方法可以更新或删除文件本身中的特定键???

解决方法

是的,即使在像 JS 这样的高级编程语言中,也可以更新文件的某些部分,尽管它通常在低级编程语言中更常见,例如

对于node.js,查看文件系统模块的官方文档,尤其是write函数:https://nodejs.org/api/fs.html#fs_fs_write_fd_buffer_offset_length_position_callback

您的问题的其他可能解决方案:

  1. 按照eol的建议使用数据库
  2. 使用仅附加更新的文件。这样效率更高,因为不必写入整个文件。
  3. 将您的数据库文件拆分为多个文件(这是数据库在表面之下经常做的事情)
,

您已经发现数据库为何如此复杂;)

没有完全读取和解析数据、编辑然后再次写入结果的情况下更新 json 文件并没有真正的好方法。

如果您正在寻找一个简单的文件数据库,请查看 sqlite

,

要进行这些类型的数据更改,请使用 DB,对于 JSON 文件,您必须将完整数据存储在变量中并执行操作。

,

由于您正在处理基于文件的数据存储,您可以在 node.js 中使用 FS 来读取和写入文件。 readfilesync 回调会返回文件的全部内容,这些内容应该被解析为 JSON 并进行更改。

因此,AFAIK 唯一的解决方案是读取整个文件,然后更新或删除该值。在最坏的情况下,当您尝试更新或删除密钥时,您将遍历 O(n)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。