Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将消息对象推送到JSON对象中的数组_Javascript_Json_Node.js - Fatal编程技术网

Javascript 如何将消息对象推送到JSON对象中的数组

Javascript 如何将消息对象推送到JSON对象中的数组,javascript,json,node.js,Javascript,Json,Node.js,我有一个像这样的JSON对象 { "messages":["{date: 2017-8-23 12:50:05, name: aaa, msg: zzz}"]} 我想在Node.js中的每个用户发送消息之后将更多对象推送到消息数组,但我只克隆JSON对象。如何解决这个问题 这是我的代码: const JSONTemplate = (filePath, date, name, msg) => { let obj = { messages: [], }; obj.messages.p

我有一个像这样的JSON对象

{ "messages":["{date: 2017-8-23 12:50:05, name: aaa, msg: zzz}"]}
我想在Node.js中的每个用户发送消息之后将更多对象推送到消息数组,但我只克隆JSON对象。如何解决这个问题

这是我的代码:

const JSONTemplate = (filePath, date, name, msg) => {
let obj = {
    messages: [],
};
obj.messages.push(`{date: ${date}, name: ${name}, msg: ${msg}}`); //add some data
json = JSON.stringify(obj);
fs.appendFile(filePath, json, (err) => {
  if (err) throw err;
}); }

您可以尝试放置真实对象,而不是字符串表示

obj.messages.push({date, name, msg}); 
但你的问题对我来说还不清楚。字符串表示中有一个错误。您无法解析回序列化对象,因为字符串中缺少撇号

也许您无法获得多个值的数组,因为您需要通过每次函数调用重写数组

const JSONTemplate = (filePath, date, name, msg, array = []) => {
let obj = {
    messages: array,
};
obj.messages.push({date, name, msg}); //add some data
json = JSON.stringify(obj);
fs.appendFile(filePath, json, (err) => {
  if (err) throw err;
}); }

如果您想先附加JSON数据,您可以读取该文件,然后可以覆盖该文件

const JSONTemplate = (filePath, date, name, msg) => {
fs.readFile(filePath, function (err, data) {
    var json = JSON.parse(data);
   //add some data
   json.messages.push(JSON.stringify({date: ${date}, name: ${name}, msg: ${msg}})); 

   fs.writeFile(filePath, json, (err) => {
     if (err) throw err;
   });
 });  
}
在处理诸如JSON.parse()、fs.readFileSync等同步函数时,使用try..catch进行错误处理也是一种很好的做法

try{
   var json = JSON.parse(data);
}catch(e){
   throw e
} 

快乐编码没有帮助。我复制了Obj,而不是将数据附加到arraylet Obj={messages:[],};通过这一行可以创建一个新数组。也许你需要传递上一个。是的,我明白了,但我知道我必须检查我的文件中是否有json对象,然后我可以将其放入数组。当读取文件时,你需要用json.parse解析它,然后在下面的函数中传递数组。默认参数表示,如果未设置该参数的值,则该参数将替换为空数组。