有没有一种原生JavaScript方法可以解析格式不好的类似JSON的字符串?

有没有一种原生JavaScript方法可以解析格式不好的类似JSON的字符串?,javascript,json,parsing,Javascript,Json,Parsing,考虑以下文件作为node.js中附带的JavaScript的输入。脚本将因“意外令牌h”而失败,因为hello不在引号中。有没有一种不用先修复字符串就可以解析这个文件的方法 data.json { "foo": "bar", hello: "world", "jane": "fonda", jimmy: "buffet" } index.js /*jslint node:true*/ "use strict"; var fs = require("fs"); f

考虑以下文件作为node.js中附带的JavaScript的输入。脚本将因
“意外令牌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);
});

正如Vinin Paliath已经说过的,这是不可能的。如果不正确的语法将被解析,那么它不会是不正确的语法,对吗

充其量,您可以尝试编写一个自定义函数来清除常见的JSON标记错误。例如,检查是否有遗漏的引号,如您的示例中所示

如果JSON是不正确的JSON,但作为javascript对象文字是正确的,那么可以使用eval<代码>评估('var jsonData='+数据)我强烈建议不要使用用户输入的数据,因为存在安全问题。e、 g.有人把
{};警报(“侵入性消息”)data
中的code>介绍了如何使用
eval
执行此操作,它不会在
严格模式下运行。另一种方法是创建一个
函数
对象,将格式不良的数据作为函数体:

var f = new Function("return " + data);
var ff = f();
console.log(ff);

这是在
严格模式下运行的
,但我不确定它离
eval

有多远。你为什么要这样做?这就像问“即使JavaScript程序包含语法错误,我如何解析和运行它?”你不能期望JSON解析器解析无效的JSON。你必须将
数据
解析为字符串,并编写一系列检查和修复函数。比如,“这一行是否以引号以外的字符开头?如果是,则用引号括起来”。但是,如果您正在加载无效的JSON,那么您将不得不测试无限多不同的情况。更大的问题是,你从哪里得到无效的JSON?为什么JSON无效?如果它作为一个对象文本工作,您可以始终使用
eval
,例如
eval('var jsonData='+data)
永远不要对来源不明的数据使用eval。e、 你从网上某个匿名者那里得到的字符串。如果字符串包含javascript代码,它将被执行。@VivinPaliath好吧,我不时会收到很多格式不好的数据,我希望使用这些数据时不会感到头痛。促使我尝试帮助的是。谢谢,只要我不介意使用
eval
,这将起作用。我发布了一个使用
new Function()
的替代方法。在严格模式下禁止在eval中声明变量,只需返回数据,无需分配数据…eval在严格模式下工作正常,事实上更好,不确定您在描述什么。。。