JavaScript字符串转换为对象

27

如何将字符串对象的值应用到一个变量上 例如:

var str='{a:"www"}'
现在如何设置
var obj={a:"www"}

我尝试使用eval()但是没有生效。


可能是以下链接的重复问题:https://dev59.com/Amw15IYBdhLWcg3wo9Rx - HellaMad
1
可能是JS中的字符串转对象的重复问题。 - Peter O.
可能是Safely turning a JSON string into an object的重复问题。 - 0lukasz0
1
如果可能的话,您应该使用有效的JSON。eval()很少是一个好主意。 - user1019517
2个回答

40

eval应该能够正常工作,实际上这是一个MDN解决方案,除此之外,你的字符串不是一个有效的JSON,所以eval是你唯一的选择(如果你不想为此包含一个库)。

var str='{a:"www"}';
var obj=eval("("+str+")");
console.log(obj);

在Chrome Dev Tool中进行快速测试:

eval("("+'{a:"www"}'+")")
Object
    a: "www"
    __proto__: Object

记得将你的字符串用括号括起来并且将其分配给eval之外的变量,这样它就会(相对)安全。


7
没有使用括号时,我遇到了错误。在调用eval()之前将对象的字符串表示形式用括号括起来对我也起作用了,但是为什么需要用括号呢? - Dexygen
有没有一个库来处理这个? - BuddhiP
1
@GeorgeJempty - 根据MDN的说法,这些是声明函数所需的内容,我猜对象也是一样的。如果您传递包含语句列表的字符串,则应该可以工作。 - Pimp Trizkit
太棒了,谢谢!这应该是被接受的答案。 - Zachary Raineri

27
var str='{"a":"www"}';
var obj = JSON.parse(str);

21
是的,但现在它不符合要求 :) - Samuel Caillerie
FYI,它也可以与eval一起使用。但出于安全原因,不建议使用eval。 - Subir Kumar Sao
@trebuchet 谢谢,为什么eval存在安全风险? - Ankit_Shah55
对于以JSON_stringify存储的字符串,trebuchet解决方案有效。我有一个字符串“{"1":["2013-05-10","3","#f70707"]}",经过JSON.parser处理后,我得到了Object {1: Array[3]}。 - IberoMedia
10
唯一会导致eval出现问题的情况是当用户1的输入被解释为JavaScript并作用于用户2时,用户2会被带到一个可怕的色情网站上,他的妻子走进来了。然后用户2经历了一场可怕的离婚,再也没有见过自己的孩子。这只是其中一种情况。 - Michael J. Calkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接