考虑下面的文件被用作node.js中使用的随附JavaScript的输入。该脚本将失败并显示"Unexpected token h"
,因为hello
不在引号中。有没有办法解析这个文件而无需先修复字符串?
data.json
{
"foo": "bar",
hello: "world",
"jane": "fonda",
jimmy: "buffet"
}
index.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);
});
答案 0 :(得分:1)
正如Vinin Paliath所说,这是不可能的。如果不正确的语法会解析,那么它的语法就不正确了,不是吗?
充其量,您可以尝试编写一个自定义函数来清除常见的JSON标记错误。例如。检查缺少的引号,如示例中所示。
如果您的JSON是不正确的JSON,但作为javascript对象文字是正确的,您可以使用eval。 eval('var jsonData = ' + data);
我强烈建议用户输入数据,因为安全问题。例如有人将{};alert("intrusive message");
放入data
。
答案 1 :(得分:0)
Wingblade's answer介绍了如何使用eval
执行此操作,strict mode
无法在Function
下运行。另一种方法是使用格式不正确的数据创建一个var f = new Function("return " + data);
var ff = f();
console.log(ff);
对象作为函数体:
strict mode
此操作在eval
下运行,但我不确定距离rb+
有多远。