为啥不能从文件中解析 JSON?

Posted

技术标签:

【中文标题】为啥不能从文件中解析 JSON?【英文标题】:Why cant parse JSON from file?为什么不能从文件中解析 JSON? 【发布时间】:2015-09-12 02:25:37 【问题描述】:

我们有空的 JSON 文件 我想在这个文件中编写新的 JSON 对象,并从中获取 JSON 对象数组(然后通过“推送”将新的 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;
  

【问题讨论】:

“我遇到了一个错误” - 嘿,我完全赞成在文学中写悬疑小说,但在这里我宁愿你真的告诉我们你遇到了什么错误。此外,为您正在使用的语言/技术添加适当的标签也很好。 猜测,node.js? nodeJS, "SyntaxError: Unexpected token ," 当你给出错误时,你必须指定完整的错误和它发生的行。使用“编辑”链接编辑您的问题以包含它。 我猜你正在使用 javascript?正确的?不管怎样,你写的东西有点问题。如果你想让多个 JSON 彼此相邻,你应该考虑将它们放入一个数组中:updatedJsonStr = []; updatedJsonStr.push(JSON.stringify(tasksJsonObj)); updatedJsonStr.push(JSON.stringify(newJsonTask));,然后将它们写入文件! @Spacemaster 你可以使用'@'来通知这个人(就像我一样)。并接受我在下面的回答,以帮助每个人以及你自己:) 【参考方案1】:

你写的东西有点问题。如果你想让多个 JSON 彼此相邻,你应该考虑将它们放入一个数组中:

updatedJsonStr = [];
updatedJsonStr.push(JSON.stringify(tasksJsonObj));
updatedJsonStr.push(JSON.stringify(newJsonTask)); 

然后将它们写入文件!

【讨论】:

【参考方案2】:

如果您试图“扩展”对象:

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);

【讨论】:

【参考方案3】:

您的 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 );

然后将其字符串化并写回文件。

【讨论】:

所以当我尝试将新的 JSON 元素推送到主数组时: var TasksJsonArray = [];函数 readJsonContent() try TasksJsonArray = JSON.parse(fs.readFileSync(tasks, "utf-8")); ... .... TasksJsonArray.push(JSON.stringify(newJsonTask));我在尝试推送时遇到错误“未定义不是函数”.. 你只能推送对象而不是json字符串,像这样TasksJsonArray.push(newJsonTask); 非常感谢.. 花了很多时间想知道如何组织这种地狱般的机制..

以上是关于为啥不能从文件中解析 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Javascript 不能从字符串文字中解析这个 JSON 数组?

为啥 Javascript 不能从字符串文字中解析这个 JSON 数组?

为啥 Python 不能解析这个 JSON 数据? [关闭]

为啥 jQuery dataTables 不能解析我的 JSON?

为啥在解析json中汉字解析不了

从 JSON 文件解析可翻译的消息