Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
为什么不能从文件解析JSON?_Json_Node.js - Fatal编程技术网

为什么不能从文件解析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"));

我们有空的JSON文件 我想在这个文件中写入新的JSON对象,并从中获取JSON对象数组(然后通过“push”将新的JSON附加到数组中) 我向文件写入传入的JSON对象:

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);非常感谢..花了很多时间想知道如何组织这个地狱般的机制。。