我试图将一个对象添加到Node.js中的一个很大的JSON文件中(但前提是ID与现有对象不匹配)。到目前为止,我有:

示例JSON文件:

[
  {
    id:123,
    text: "some text"
  },
  {
    id:223,
    text: "some other text"
  }
]

app.js
var fs = require('fs');
var jf = require('jsonfile')
var util = require('util')
var file = 'example.json'

// Example new object
var newThing = {
  id: 324,
  text: 'more text'
}

// Read the file
jf.readFile(file, function(err, obj) {
  // Loop through all the objects in the array
  for (i=0;i < obj.length; i++) {
    // Check each id against the newThing
    if (obj[i].id !== newThing.id) {
      found = false;
      console.log('thing ' + obj[i].id + ' is different. keep going.');
    }else if (obj[i].id == newThing.id){
      found = true;
      console.log('found it. stopping.');
      break;
    }
  }
  // if we can't find it, append it to the file
  if(!found){
    console.log('could not find it so adding it...');
    fs.appendFile(file, ', ' + JSON.stringify(newTweet) + ']', function (err) {
      if (err) throw err;
      console.log('done!');
    });
  }
})

这太接近我想要的了。唯一的问题是JSON文件末尾的]字符。有没有一种使用文件系统API或其他方式将其删除的方法?还是有一种更简单的方法来准确地完成我想要的事情?

最佳答案

处理此问题的正确方法是解析JSON文件,修改对象,然后再次输出。

var obj = require('file.json');
obj.newThing = 'thing!';
fs.writeFile('file.json', JSON.stringify(obj), function (err) {
  console.log(err);
});

10-07 19:17
查看更多