JavaScript:将post请求json字符串附加到现有json文件

JavaScript:将post请求json字符串附加到现有json文件,javascript,json,node.js,express,Javascript,Json,Node.js,Express,我有一个简单的express应用程序,它接受带有一些JSON数据的post请求。我希望获取该数据并将其附加到现有的json文件(如果存在的话)。键值对可能不同。我的当前版本将对象推送到对象数组中。理想情况下,我只想添加另一个键/值对: app.post('/notes', function(req, res){ var body = ""; req.on('data', function(chunk){ body += chunk; }); req.on('end', f

我有一个简单的express应用程序,它接受带有一些JSON数据的post请求。我希望获取该数据并将其附加到现有的json文件(如果存在的话)。键值对可能不同。我的当前版本将对象推送到对象数组中。理想情况下,我只想添加另一个键/值对:

app.post('/notes', function(req, res){
  var body = "";
  req.on('data', function(chunk){
    body += chunk;
  });
  req.on('end', function(){
    fs.readFile(__dirname + '/data/notes.json', function(err, data){
      if (err) throw err;
      console.log(body);
      var fileObj = JSON.parse(data.toString());
      var postObj = JSON.parse(body);
      fileObj.notes.push(postObj);
      var returnjson = JSON.stringify(fileObj);
      fs.writeFile(__dirname + '/data/notes.json', returnjson, function(err){
        if (err) throw err;
        res.send(returnjson);
      });
    });
  });
});
notes.json中可能包含的内容示例:

{"note": "Dear Diary: The authorities have removed the black pants from the couch"}
这是可行的,但我在添加帖子中的json时遇到了麻烦(假设本例中没有嵌套数据)


编辑:与仅附加到文件不同。需要附加到文件中的对象。

您只需借助循环遍历post对象,并将其属性添加到文件对象中即可。请记住,在这种情况下,如果属性键相同,它们的值将被覆盖。为了避免这种情况,您可以在的帮助下进行验证

这里是关于。。。每个语句,如果不想覆盖属性。新属性将使用以下后缀生成:
\u 1
\u 2
等。您也可以使用类似的方法来确保属性不会重复,但这样会更难看,可读性较差

for(var key in postObj) { 
     if(fileObj.hasOwnProperty(key)) {            
        while(true) {
            i++; 
            newKey = key + '_' + i;
            if(fileObj.hasOwnProperty(newKey) == false) {
                fileObj[newKey] = postObj[key];   
                break;
            }                
        }
     } else {
        fileObj[key] = postObj[key];
     }  
  }

当您说append时,您是指向文件中添加额外的JSON对象行,还是指将接收到的JSON对象的键/值对与文件中的键/值对合并?add additional:因此可能会有一个{“note2”:“这是一个新的注释”}POST请求中要附加到现有notes.json文件的键值对。的可能重复项我不这么认为。它必须添加到文件中的JSON对象中,而不是在结束括号之后。每次要更新文件时,都要读取、解析、附加新JSON、序列化并重写文件。这是一大笔开销。您是否可以在每次post请求时将
JSON.stringify(postObj)+',
附加到文件中,然后在读取日志文件时对其进行一些处理?(处理过程可能像
JSON.parse('['+fileData+']')一样简单。
。我认为这很接近。但是如果postObj和fileObj中的键相同,postObj将覆盖原始的。我想知道是否有办法添加唯一标识符。
for(var key in postObj) { 
     if(fileObj.hasOwnProperty(key)) {            
        while(true) {
            i++; 
            newKey = key + '_' + i;
            if(fileObj.hasOwnProperty(newKey) == false) {
                fileObj[newKey] = postObj[key];   
                break;
            }                
        }
     } else {
        fileObj[key] = postObj[key];
     }  
  }