如何解决在节点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
您的问题的其他可能解决方案:
- 按照eol的建议使用数据库
- 使用仅附加更新的文件。这样效率更高,因为不必写入整个文件。
- 将您的数据库文件拆分为多个文件(这是数据库在表面之下经常做的事情)
您已经发现数据库为何如此复杂;)
没有完全读取和解析数据、编辑然后再次写入结果的情况下更新 json 文件并没有真正的好方法。
如果您正在寻找一个简单的文件数据库,请查看 sqlite
,要进行这些类型的数据更改,请使用 DB,对于 JSON 文件,您必须将完整数据存储在变量中并执行操作。
,由于您正在处理基于文件的数据存储,您可以在 node.js 中使用 FS 来读取和写入文件。 readfilesync 回调会返回文件的全部内容,这些内容应该被解析为 JSON 并进行更改。
因此,AFAIK 唯一的解决方案是读取整个文件,然后更新或删除该值。在最坏的情况下,当您尝试更新或删除密钥时,您将遍历 O(n)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。