繁体   English   中英

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

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

考虑以下文件用作 node.js 中使用的随附 JavaScript 的输入。 该脚本将失败并显示"Unexpected token h"因为hello不在引号中。 有没有办法解析这个文件而不必先修复字符串?

数据.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 是不正确的 JSON,但作为 javascript 对象文字是正确的,您可以使用 eval。 eval('var jsonData = ' + data); 不过,由于安全问题,我强烈建议不要使用用户输入的数据。 例如有人把{};alert("intrusive message"); data

Wingblade 的回答涵盖了如何使用eval来做到这一点,它不会在strict modestrict mode 一种替代方法是创建一个以格式错误的数据作为函数体的Function对象:

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

这在strict modestrict mode ,但我不确定它离eval多远。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM