【问题标题】:Node.js update JSON data in fileNode.js 更新文件中的 JSON 数据
【发布时间】:2013-10-14 20:36:52
【问题描述】:

我必须在文件中写入一些 JSON 数据。 一些 JSON 对象在程序执行过程中必须更新,并且这些更新必须保存在文件中(例如数组中的对象)。

有没有一种方法可以在不重写整个文件的情况下做到这一点?

JSON 结构:

{
    "varA": {
        "varA1": value,
        "varA2": value,
    },
    "varB": value,
    "varC": value,
    "varD": value,
    "array": [
        { obj1 },
        { obj2 },
        { obj3 },
    ]
}

【问题讨论】:

  • 怀疑,我的印象是FS写入整个文件或什么都不写。你为什么不想重写它?也许将您的 JSON 拆分为多个文件和/或将其存储在数据或内存中。
  • 你可以很容易地write to arbitrary positionsappend to files,但是当然你需要知道你的文件的结构。
  • 在我的测试中,我看到如果我在写入过程中关闭服务器,那么整个文件将是空白的,丢失之前记录的所有数据。简单的追加无法工作,因为应该更新的数据是另一个对象的元素,所以我会遇到括号问题
  • 我会为节点使用 mongo 或其他一些轻量级的 json db。
  • 如果您想要更复杂一点,我会创建一个新文件而不是尝试重写现有文件(使用新文件名),并在加载/同步时始终查找最新文件文件。当您“找到”新文件时清除旧文件。

标签: javascript json node.js


【解决方案1】:

如果您想要更复杂的文件管理解决方案(但实现起来非常简单),我会:

  1. 创建一个新文件,而不是尝试重写现有文件(每次都使用新文件名)。我建议使用包含时间戳(人类可读或毫秒)的东西。
  2. 并在加载/同步文件时始终查找最新文件
  3. 当您“找到”新文件并且成功读取时,清除旧文件。如果文件没有成功读取,则说明发生了一些事情。退回到下一个文件,最好删除坏文件。或者,等到新文件成功写入。

这样,您就不用担心文件没有完全写入等问题。

【讨论】:

    【解决方案2】:

    如果您有多个文件,我强烈建议您使用 MongoDB,因为它正是它的优点。

    使用 MongoDB,您可以执行以下操作(来自 docs):

       db.books.update( { item: "Divine Comedy" },
                 {
                   $set: { price: 18 }, // set property value
                   $inc: { stock: 5 },   // increment etc field value
    
                 } )
    
       // add value in array
       db.bios.update(
         { _id: 1 },
         {
            $push: { awards: { award: "IBM Fellow", year: 1963, by: "IBM" } }
         }
    

    )

    更新:另外,由于您提到文件实际上是配置,请查看 Grunt 可以做什么。比如回答这个问题Updating file references in a json file via a grunt task

    【讨论】:

    • 从相对简单的文件请求到使用数据库系统?如果 MongoDB 尚未投入使用,那么这可能是对基础架构的大规模且复杂(且成本高昂)的修改。
    • 这个周末我会研究你的建议,但目前我支持 WiredPrairie 的想法。
    猜你喜欢
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 2012-05-27
    • 2021-03-30
    相关资源
    最近更新 更多