如何正确使用eval()来解析无效Json
How to use eval() properly to parse Invalid Json
我有一个无效的Json字符串,我需要将其解析为对象并提供给视图模型:
var s = "{ a: new Date(1400000000000) }"; // from a server, can't change this
eval("var b = " + s); // parse it to a var b
var vm = new viewmodel(b); // pass var b to the viewmodel
这可以工作,但是在我可以使用解析对象
之前,我最终得到了一个中间对象b。所以我试了:
var s = "{ a: new Date(1400000000000) }"; // from a server, can't change this
var vm = new viewmodel(eval(s)); // parse the object and pass to viewmodel
但这不起作用
你能解释为什么吗?
是否有另一种方法可以做到这一点,而不需要中间变量b?
尝试这样使用
var vm = new viewmodel(eval('(' + s + ')'));
您需要包装对象表达式(它不是单独的有效语句):
var s = "{ a: 3, b: 7 }";
var obj = eval('(' + s + ')');
不用说eval是不安全的,但是如果你别无选择…请注意,这将执行服务器发送给您的任何代码。为什么使用JavaScript的eval函数是一个坏主意?为了更深入地讨论这件事
额外的乐趣:尝试在在线esprima解析器中输入{ a: 3, b: 7 }
和({ a: 3, b: 7 })
:) http://esprima.org/demo/parse.html
另一种方法是:
var s = "{ a: new Date(1400000000000) }";
var vm = new viewmodel(new Function('return ' + s).call());
使用eval
的区别在于,这样代码(s
) 不能访问局部变量,因为代码在单独的函数作用域中运行。
解析JSON的最佳方法是使用JSON.parse()
。eval()
不是很安全。
var vm = new viewmodel(JSON.parse(s));
相关文章:
- Jquery Datatables错误:无效的JSON基元:draw
- Laravel数据表无效的JSON响应
- 使用JSON.parse时出现无效字符javascript错误
- JSON.stringify抛出RangeError:大型对象的字符串长度无效
- 解析 JSON 时出现无效字符错误
- 为什么 JSON.parse 给出无效的字符
- TypeError: 使用 Jquery JSON 获取数据时无效的 'in' 操作数 obj
- AJAX:无效的JSON响应
- 为什么MooTools JSON.encode()返回“$呼叫者”:无效的
- JSON.parse中存在无效字符
- 无效的JSON-试图嵌套数组
- JSON无效字符错误
- 修复无效JSON的最有效方法
- 无效的“in”操作数 obj JQUERY - 尝试从 JSON 获取数据时出现类型错误
- 用于修复无效 JSON 的正则表达式
- 为什么这是谷歌图表的无效JSON字符串
- 来自json_encode()的无效json
- 从asp.net Webservice生成的无效JSON
- 如何正确使用eval()来解析无效Json
- iccast json-status.xls,无效json答案与空白歌曲标题