为什么无法解析文件中的JSON?

时间:2015-06-25 12:56:41

标签: json node.js

我们有空的JSON文件 我想在这个文件中编写新的JSON对象,并从中获取JSON对象的数组(之后只需通过' push'将新的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;
  }




3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果你想"延伸"对象:

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

答案 2 :(得分:0)

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

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

然后将它们写入文件!