Javascript 如何将消息对象推送到JSON对象中的数组
我有一个像这样的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
{ "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解析它,然后在下面的函数中传递数组。默认参数表示,如果未设置该参数的值,则该参数将替换为空数组。