为啥不能从文件中解析 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 数据? [关闭]