是否有一种原生的JavaScript方法来解析格式不佳的JSON类字符串?

时间:2015-10-27 23:50:31

标签: javascript json parsing

考虑下面的文件被用作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);
});

2 个答案:

答案 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+有多远。