在Node.JS和Javascript中追加到JSON文件

6
我目前有一个按照以下格式设置的JSON文件:
{
   "OnetimeCode" : "Value"
}

我希望能够做到两件事:
  • 附加到文件中(更改文件中的值)
  • 向文件中添加新项目(格式相同)
我已经搜索了将近一个小时,试图找到一个模块(针对Node)或者只是简单的示例代码,以便让我完成这个任务。
我已经尝试过使用几个插件,但它们完全重写了文件,而不是附加到文件中。
其中一个插件叫做“jsonfile”(npm install jsonfile)。
var jf = require('jsonfile'); // Requires Reading/Writing JSON    
var jsonStr = WEAS_ConfigFile;
        var obj = JSON.parse(jsonStr);
        obj.push({OnetimeCode : WEAS_Server_NewOneTimeCode});
        jf.writeFileSync(WEAS_ConfigFile, obj); // Writes object to file

但似乎这并不起作用。 欢迎任何帮助!但请保持简单。另外:我不能使用jQuery。

你想在运行时还是在构建时做这个? - moarboilerplate
你需要重写这段程序代码,因为JSON文件的末尾始终会有终止符(可以是"]}中的任何一个),你需要将内容放置在它的内部。 - Plato
好的,有没有一种方法可以重写它但保留现有数据? - medemi68
我不在意重写文件,只需要简单易行,并且尽可能少的代码行数。同时,我也需要保留数据。 - medemi68
1个回答

11

您提供的使用 jsonfile 库的代码看起来很不错:将 JSON 解析为对象,调用 .push(),然后保存内容。

如果使用原始 Node 调用(假设 JSON 文件是数组的表示):

var fs = require('fs');
function appendObject(obj){
  var configFile = fs.readFileSync('./config.json');
  var config = JSON.parse(configFile);
  config.push(obj);
  var configJSON = JSON.stringify(config);
  fs.writeFileSync('./config.json', configJSON);
}

appendObject({OnetimeCode : WEAS_Server_NewOneTimeCode});

我会试一下,谢谢。(一个函数正是我所需要的) - medemi68
给我报错:"对象#<Object>没有'push'方法。" - medemi68
好的,那是因为对象没有方法'push'... 要么使用数组,要么在对象上明确设置键/值: config['user3624610'] = {name: 'bob', code: 'abc'} - Plato
不要建议使用readFileSyncwriteFileSync函数,因为这与NodeJS的异步特性相悖。只有在严格必要的情况下才应该使用这些方法。而这不是那个情况。 - Ze Luis
1
@ZeLuis 他要求提供简单、易懂、最少的示例代码,而不是让同步解决方案“极其不正确”。 - Plato
那么对于非常大的JSON文件怎么办! - Ahmed Eid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接