Yallo,我最终解释了为什么notes = JSON.parse(notesString)
将我的数组转换为字符串而不是将我的json字符串传递给数组。我通过检查之前和之后的typeof
进行了测试。我理解为什么不能使用push因为它不再是一个数组。但我不知道解决方案。
代码
// array to store notes in
var notes = [];
// note JSON object
var note = {
title: title,
body: body
};
try {
// read pre-existing content of notes-data.json file
var notesString = fs.readFileSync('notes-data.json');
// store pre-existing data as the notes array, passing as
// JSON
console.log("notesString: " + typeof notesString)
console.log("notes before parse: " + typeof notes)
notes = JSON.parse(notesString)
console.log("notes after parse:" + typeof notes)
} catch (e) {
}
// add note to notes array
notes.push(note)
// store content of notes array in notes-data.json as a string
fs.writeFileSync('notes-data.json', JSON.stringify(notes));
这是我的JSON
"[{\"title\":\"herp\",\"body\":\"derp\"},{\"title\":\"herp\",\"body\":\"derp\"}]"
输出
notesString: object
notes before parse: object
notes after parse:string
C:\Visual Studio 2015\Projects\Note_App_NodeJS\Note_App_NodeJS\notes.js:32
notes.push(note)
^
TypeError: notes.push is not a function
解决 对不起的人我不知道发生了什么,但我应该先验证我的输出/输入。我不知道为什么它以这种方式格式化,并且它以正确的json格式格式化,因为转换为stingify然后解析回来。我正在使用带有Nodejs扩展的Visual Studio,所以可能与它有关。
答案 0 :(得分:4)
由于外部引号,它是一个字符串。如果删除它们,则JSON无效。您必须根据JSON规则对其进行格式化。所有键必须是字符串,值只能是基元,如字符串,数字,布尔值,数组或其他JSON对象。
将您的JSON格式化为
[
{
"title": "herp",
"body":"derp"
},
{
"title":"herp",
"body":"derp"
}
]
您可以在此处看到一些示例:http://json.org/example.html
答案 1 :(得分:2)
抱歉,我应该更加具体地说明它包含的内容"[{\"title\":\"herp\",\"body\":\"derp\"},{\"title\":\"herp\",\"body\":\"derp\"}]"
这是字符串的JSON表达式,这就是解析它时得到字符串的原因。
该字符串碰巧包含一组嵌套的JSON,它是您要查找的数组。
从字符串中提取该数组并将其放入文件中。
[{"title":"herp","body":"derp"},{"title":"herp","body":"derp"}]