首頁 >web前端 >js教程 >JS操作JSON詳細總結_javascript技巧

JS操作JSON詳細總結_javascript技巧

WBOY
WBOY原創
2016-05-16 16:58:021012瀏覽

在JS中將JSON的字串解析成JSON資料格式,一般有兩種方式:

1.一種為使用eval_r()函數。

2. 使用Function物件來進行回傳解析。

在資料傳輸流程中,json是以文本,即字串的形式傳遞的,而JS操作的是JSON對象,所以,JSON對象和JSON字串之間的相互轉換是關鍵。例如:

JSON字串:
var str1 = '{ "name": "cxh", "sex": "man" }';

JSON物件:
var str2 = { "name": "cxh", "sex": "man" };

第一種解決方法:
var dataObj=eval_r("(" data ")");//轉換成json物件
為什麼要eval這裡要新增「("(" data ")");//」呢?

原因在於:eval本身的問題。由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表達式。

加上圓括號的目的是迫使eval函數在處理JavaScript程式碼的時候強制將括號內的表達式(expression)轉換為對象,而不是作為語句(statement)來執行。舉一個例子,例如物件字面量{},如若不加外層的括號,那麼eval會將大括號識別為JavaScript程式碼區塊的開始和結束標記,那麼{}將會被認為是執行了一句空語句。所以下面兩個執行結果是不同的:
alert(eval_r("{}"); // return undefined
alert(eval_r("({})");// return object[Object]

對於這種寫法,在JS中,可以到處看到。

如: (function()) {}();  做閉包作業時等。

var str1 = '{ "name": "cxh", "sex": "man" }';
var data=eval_r("(" str1 ")");//轉換為json物件/ /data =(new
alert (data.name);//會顯示cxh

這裡特別要注意的是方式1中的eval_r()方法是動態執行其中字串(可能是js腳本)的,這樣很容易會造成系統的安全問題。所以可以採用一些規避了eval_r()的第三方客戶端腳本庫,例如JSON in JavaScript就提供了一個不超過3k的腳本庫。

第二種解決方法:
第二種解析方式就是使用Function物件來完成,它的典型應用就是在JQUERY中的AJAX方法下的success等對於傳回資料data的解析
var str1 = '{ "name": "cxh", "sex": "man" }';
var data = (Function("","re​​turn " str1) )();
alert (data.name);//會顯示cxh

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn