为什么不能从文件解析JSON?
我们有空的JSON文件 我想在这个文件中写入新的JSON对象,并从中获取JSON对象数组(然后通过“push”将新的JSON附加到数组中) 我向文件写入传入的JSON对象:为什么不能从文件解析JSON?,json,node.js,Json,Node.js,我们有空的JSON文件 我想在这个文件中写入新的JSON对象,并从中获取JSON对象数组(然后通过“push”将新的JSON附加到数组中) 我向文件写入传入的JSON对象: fs.writeFileSync(tasks, updatedJsonStr, encoding='utf8'); 在哪里 所以在文件中我们看到添加的对象。 从文件中获取JSON对象后: tasksJsonObj = JSON.parse(fs.readFileSync("tasks.json", "utf-8"));
fs.writeFileSync(tasks, updatedJsonStr, encoding='utf8');
在哪里
所以在文件中我们看到添加的对象。
从文件中获取JSON对象后:
tasksJsonObj = JSON.parse(fs.readFileSync("tasks.json", "utf-8"));
将新JSON对象追加为字符串并再次写入:
updatedJsonStr = JSON.stringify(tasksJsonObj) + ',' + JSON.stringify(newJsonTask);
writeFileSync(tasks,updatedJsonStr,encoding='utf8');
因此,我们在文件中看到2个JSON对象。
!但是,当我尝试读取包含2个JSON对象的文件时,我在从文件中读取JSON时出错([SyntaxError:Unexpected token,]):
试试看{
tasksJsonObj=JSON.parse(fs.readFileSync(tasks,“utf-8”);
log('aaaaa'+JSON.stringify(tasksJsonObj));
返回true;
}捕捉(错误){
log(“它不正常!”);
控制台日志(err);
返回false;
}
您的JSON格式错误
{"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}, {"newisCompleted":false,"task":"dfgdfg","date":"25.06.2015"}
这是concat two 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"}) );
tasksJsonObj = JSON.parse(fs.readFileSync("tasks.json", "utf-8"));
tasksJsonObj.push( newJsonTask );
因此,您的更新jsonstr将是
updatedJsonStr = JSON.stringify( tasks );
同样,如果您想附加一个新的json字符串,可以这样做
var tasks = [];
tasks.push( {"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}) );
tasksJsonObj = JSON.parse(fs.readFileSync("tasks.json", "utf-8"));
tasksJsonObj.push( newJsonTask );
然后将其字符串化并写回文件。如果您试图“扩展”对象:
如果您正试图将新对象“推”到阵列中,那么您几乎做到了:
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);
你写的东西有点问题。如果希望彼此相邻的多个JSONs,则应该考虑将它们放在一个数组中:
updatedJsonStr = [];
updatedJsonStr.push(JSON.stringify(tasksJsonObj));
updatedJsonStr.push(JSON.stringify(newJsonTask));
然后将它们写入文件 “我犯了一个错误”-嘿,我完全支持文学中的悬疑写作,但在这里我宁愿你告诉我们你犯了什么错误。另外,为您使用的语言/技术添加适当的标签也很好。猜测一下,?nodeJS,“SyntaxError:Unexpected token”,当您给出一个错误时,您必须指定完整的错误以及发生错误的行。用“编辑”链接编辑你的问题,包括它。我猜你在使用JavaScript?正确的?不管怎样,你写的东西有点问题。如果希望彼此相邻的多个JSONs,则应该考虑将它们放在一个数组中:<代码> UpDATED JSONSTR=[];updatedJsonStr.push(JSON.stringify(tasksJsonObj));updatedJsonStr.push(JSON.stringify(newJsonTask))编码>然后将它们写入文件@Spacemaster您可以使用“@”通知此人(就像我所做的那样)。也请接受我下面的回答,以帮助大家和自己:)因此,当我尝试将新的JSON元素推送到主数组时:var tasksjonarray=[];函数readJsonContent(){try{tasksjonarray=JSON.parse(fs.readFileSync(tasks,“utf-8”));….tasksjonarray.push(JSON.stringify(newJsonTask));我在尝试推送的行中遇到一个错误“undefined不是函数”。您只能推送对象而不是JSON字符串,像这样做tasksjonarray.push(newJsonTask);非常感谢..花了很多时间想知道如何组织这个地狱般的机制。。