Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析格式错误的JSON字符串_Javascript_Node.js - Fatal编程技术网

Javascript 解析格式错误的JSON字符串

Javascript 解析格式错误的JSON字符串,javascript,node.js,Javascript,Node.js,第三方向我发送了格式错误的JSON字符串。我尝试使用JSON.parse(str)将其解析为JavaScript对象,但当然失败了 原因是键不是字符串: {min: 100} 与有效的JSON字符串(解析很好)相反: 我现在需要接受格式不正确的字符串。我想忘记正确引用密钥是一个常见的错误。有没有一种好方法可以将其更改为有效的JSON字符串,以便我可以对其进行解析?现在,我可能不得不逐个字符地解析,并尝试形成一个对象,这听起来很糟糕 想法?根据JSON中的其他内容,您可以简单地执行字符串替换,将

第三方向我发送了格式错误的JSON字符串。我尝试使用
JSON.parse(str)
将其解析为JavaScript对象,但当然失败了

原因是键不是字符串:

{min: 100}
与有效的JSON字符串(解析很好)相反:

我现在需要接受格式不正确的字符串。我想忘记正确引用密钥是一个常见的错误。有没有一种好方法可以将其更改为有效的JSON字符串,以便我可以对其进行解析?现在,我可能不得不逐个字符地解析,并尝试形成一个对象,这听起来很糟糕


想法?

根据JSON中的其他内容,您可以简单地执行字符串替换,将
'{'
替换为
'{'
,并将
'替换为
:“
替换为
”:“

您可以直接求值,但如果您不信任源,这将是不好的安全做法。更好的解决方案是手动修改字符串以引用密钥,或者使用其他人为您编写的工具(签出由daepark编写)。

我最近刚刚这样做,使用以下方法求值:

var jsp = require("uglify-js").parser;
var pro = require("uglify-js").uglify;

var orig_code = "var myobject = " + badJSONobject;
var ast = jsp.parse(orig_code); // parse code and get the initial AST
var final_code = pro.gen_code(ast); // regenerate code

$('head').append('<script>' + final_code + '; console.log(JSON.stringify(myobject));</script>');
var jsp=require(“uglify js”).parser;
var pro=要求(“uglify js”)。uglify;
var orig_code=“var myobject=“+badJSONobject;
var ast=jsp.parse(orig_code);//解析代码并获取初始ast
var final_code=pro.gen_code(ast);//重新生成代码
$('head').append(''+final_code+';console.log(JSON.stringify(myobject));');

这在某种程度上是非常草率的,并且有着与eval()相同的问题基于此解决方案,但如果您只需要一次解析/重新格式化数据,那么上面的内容应该可以为您获得JS对象的干净JSON副本。

这里似乎有一些解决方案:我认为在这种情况下使用函数构造函数应该行得通:
var data=new Function('return'+illFormedJSON;)()(
(?:[a-z]+):+
我要说的是搜索所有不正确的键。这不是一个完整的正则表达式,应该给你一个开始的位置。没有时间完全回答这个问题。@m90不是伪装的评估吗?类似于:
{a:alert('whoa!')的JSON怎么样
Wow感谢洞察Kolink。曾经编写过不可编译的代码……它不是真正的代码。我真的不认为标题“Cannot parse not JSON to JS object”会得到很多点击。你知道我的意思。FWIW,这将是最慢的方法之一。Uglify是一个成熟的JavaScript解析器;可以自己操作字符串是的,这种方法是为Grunt风格的构建脚本而设计的,而不是为关注效率的实时应用程序而设计的。
var jsp = require("uglify-js").parser;
var pro = require("uglify-js").uglify;

var orig_code = "var myobject = " + badJSONobject;
var ast = jsp.parse(orig_code); // parse code and get the initial AST
var final_code = pro.gen_code(ast); // regenerate code

$('head').append('<script>' + final_code + '; console.log(JSON.stringify(myobject));</script>');