我正在尝试使用以下方法将 JSON 对象转换为“普通”对象...
var slaobj = eval('('+s+')');
s 是 JSON
。然而,它似乎不起作用(它的“.length”返回为未定义)。我做错了什么?
最佳答案
It's `.length' is coming back as undefined
它不一定具有 length
属性,除非它是一个数组或其他具有该属性的对象。例如:
var json = '{"foo": "Value of foo"}';
var obj = eval('(' + json + ')');
alert(obj.foo); // alerts "value of foo"
alert(obj.length); // alerts "undefined", there's no `length` in `obj`
<小时/>
离题:使用 eval
反序列化 JSON 文本可能会产生安全问题,除非您可以明确信任 JSON 文本的来源(例如,它是您的自己的服务器,并且您通过 SSL 连接),因为 eval
不解析 JSON,它解析并运行 JavaScript 代码。 (添加括号并没有真正的帮助。)您可以从 Douglas Crockford 的 Github page 获得使用 eval
的替代方法。 (他是 JSON 的发明者)。最后我检查了一下,有三个替代方案,其中两个根本不使用 eval
;有关详细信息,请参阅页面底部的自述文件。
关于javascript - 将 JSONobj 转换为 Obj 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4933734/