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

Is there a native JavaScript way to parse a poorly formatted JSON-like string?

本文关键字:格式 字符串 JSON 方法 一种 有没有 JavaScript 原生      更新时间:2023-09-26

考虑将下面的文件用作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有多远。