我们有空的JSON文件 我想在这个文件中编写新的JSON对象,并从中获取JSON对象的数组(之后只需通过' push'将新的JSON添加到数组中) 我写入传入JSON对象的文件:
fs.writeFileSync(tasks, updatedJsonStr, encoding='utf8');
,其中
updatedJsonStr = JSON.stringify({"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"});
所以在文件中我们看到添加了对象。 从文件中获取JSON对象后:
tasksJsonObj = JSON.parse(fs.readFileSync("tasks.json", "utf-8"));
将新的JSON对象追加为字符串并再次写入:
updatedJsonStr = JSON.stringify(tasksJsonObj) + ',' + JSON.stringify(newJsonTask);
fs.writeFileSync(tasks,updatedJsonStr,encoding =' utf8'); 所以我们在文件中看到了2个JSON对象。 !但是当我尝试用2个JSON对象读取文件时 - 从文件中读取JSON时出现错误([SyntaxError:Unexpected token,]):
try{
tasksJsonObj = JSON.parse(fs.readFileSync(tasks, "utf-8"));
console.log('aaaaa' + JSON.stringify(tasksJsonObj));
return true;
}catch (err) {
console.log("its not ok!");
console.log(err);
return false;
}

答案 0 :(得分:0)
您的JSON形成错误,
{"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}, {"newisCompleted":false,"task":"dfgdfg","date":"25.06.2015"}
这是你在concat两个JSON stringify之后得到的,这也是无效的。
您的JSON应该是这样的
[ {"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}, {"newisCompleted":false,"task":"dfgdfg","date":"25.06.2015"} ]
为此你可以做这样的事情
var tasks = [];
tasks.push( {"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}) );
所以你的更新jsonstr将是
updatedJsonStr = JSON.stringify( tasks );
再次如果你想附加一个新的json字符串,你可以这样做
tasksJsonObj = JSON.parse(fs.readFileSync("tasks.json", "utf-8"));
tasksJsonObj.push( newJsonTask );
然后将其字符串化并将其写回文件。
答案 1 :(得分:0)
如果你想"延伸"对象:
https://lodash.com/docs#assign
deep extend (like jQuery's) for nodeJS
如果你想"推"将新对象放入数组中,然后几乎就在那里:
var updatedJsonStr = JSON.stringify([{"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}]);
fs.writeFileSync(tasks, updatedJsonStr, encoding='utf8');
var tasksJsonArr = JSON.parse(fs.readFileSync("tasks.json", "utf-8"));
tasksJsonArr.push(newJsonTask);
答案 2 :(得分:0)
你写的东西有点问题。如果你想让多个JSON彼此相邻,你应该考虑将它们放入一个数组中:
updatedJsonStr = [];
updatedJsonStr.push(JSON.stringify(tasksJsonObj));
updatedJsonStr.push(JSON.stringify(newJsonTask));
然后将它们写入文件!