2012-07-17 68 views
0
<!DOCTYPE html> 
<html> 
<body> 
<h2>JSON Object Creation in JavaScript</h2> 

<p> 
Name: <span id="jname"></span><br /> 
Eval Name: <span id="evalname"></span><br /> 
<p> 
<script> 
var yyyy= { 
"name":"John Johnson", 
"street":"Oslo West 555", 
"age":33, 
"phone":"555 1234567"}; 


document.getElementById("jname").innerHTML = yyyy.name; 
document.getElementById("evalname").innerHTML = eval(yyyy).name; 
</script> 

</body> 
</html> 

我得到了把下面这个是相同的有和无的eval()eval()在解析json对象时是非强制性的吗?

在JavaScript JSON对象创建

名称:约翰·约翰逊

评估和演示名称:约翰·约翰逊

+5

有没有这样的事情作为一个JSON对象,这不是JSON – Esailija 2012-07-17 13:45:04

+1

请参阅http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ – Matt 2012-07-17 13:46:40

+1

这就是一个正常的js对象... – OptimusCrime 2012-07-17 13:46:44

回答

7

yyyy不是JSON。这是一个JavaScript对象。所以在这种情况下,你不需要eval。当您处理JSON时,您应该使用JSON.parse而不是eval

eval只是返回您传递给它的对象,而不修改它。所以在这里是多余的。

+2

更好:“你**应该**总是使用'JSON.parse'而不是'eval'”(因为速度更快,没有'eval'的内在安全问题)。 – 2012-07-17 13:46:25

1

JSON是一个序列化协议,受Javascript启发(并命名为)。你有什么是一个实际的JavaScript对象。 JSON将作为来自服务器的响应到达浏览器,并且您将不得不使用某些东西将字符串解码为Javascript对象。 JSON.parse是最好的选择。 eval也适用于此,但是是一个非常钝和危险的工具。

您可以在服务器端使用JSON编码器将Javascript对象插入到服务器生成的Javascript中,这可能是您如何得到所显示的代码。在这种情况下,根本不需要解码器,您可以简单地使用该对象,如第一个示例中所示。