【问题标题】: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 你可以使用'@'来通知这个人(就像我一样)。并接受我在下面的回答,以帮助每个人以及你自己:)

标签: json node.js


【解决方案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);
      • 非常感谢.. 花了很多时间想知道如何组织这种地狱般的机制..
      猜你喜欢
      • 1970-01-01
      • 2018-04-15
      • 2011-07-11
      • 1970-01-01
      • 2012-10-02
      • 2017-10-02
      • 1970-01-01
      • 2015-09-17
      相关资源
      最近更新 更多