2012-07-17 31 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中,這可能是您如何得到所顯示的代碼。在這種情況下,根本不需要解碼器,您可以簡單地使用該對象,如第一個示例中所示。