考虑将下面的文件用作node.js中使用的随附JavaScript的输入。 脚本将失败并显示"Unexpected token h"
hello
因为不在引号中。 有没有办法在不先修复字符串的情况下解析此文件?
data.json
{
"foo": "bar",
hello: "world",
"jane": "fonda",
jimmy: "buffet"
}
索引.js
/*jslint node:true*/
"use strict";
var fs = require("fs");
fs.readFile("./data.json", "utf8", function (err, data) {
var jsonData = JSON.parse(data);
console.log(jsonData);
});
正如Vinin Paliath已经说过的,这是不可能的。如果语法不正确,那么它就不会是错误的语法,不是吗?
充其量,您可以尝试编写一个自定义函数来清理常见的 JSON 标记错误。 例如,检查缺少引号,如您的示例中所示。
如果你的JSON不正确,但作为javascript对象文字是正确的,你可以使用eval。 eval('var jsonData = ' + data);
我强烈建议不要使用用户输入的数据,因为安全问题。例如,有人把{};alert("intrusive message");
放在data
.
Wingblade的答案涵盖了如何使用eval
来做到这一点,它不会在strict mode
下运行。 一种替代方法是使用格式不佳的数据作为函数体创建一个Function
对象:
var f = new Function("return " + data);
var ff = f();
console.log(ff);
这在strict mode
下运行,但我不确定它离eval
有多远。