1. 程式人生 > >JSON字串和物件之間的轉換詳解

JSON字串和物件之間的轉換詳解

JSON(JavaScript Object Notation) 是JavaScript程式語言的一個子集。正因JSON是JavaScript的一個子集,所以它可清晰的運用於此語言中。

eval函式 JSON文字轉換為物件

為了將JSON文字轉換為物件,可以使用eval函式。eval函式呼叫JavaScript編輯器。由於JSON是JavaScript的子集,因此編譯器將正確的解析文字併產生物件結構。文字必須括在括號中避免產生JavaScript的語法歧義。
var obj = eval('(' + JSONTest + ')');eval函式非常快速。它可以編譯執行任何JavaScript程式,因此產生了安全性問題。當使用可信任與完善的原始碼時才可以使用eval函式。這樣可以更安全的解析JSON文字。使用XmlHttp的web應用,頁面之間的通訊只允許同源,因此是可以信任的。但這卻不是完善的。如果伺服器沒有嚴謹的JSON編碼,或者沒有嚴格的輸入驗證,那麼可能傳送包括危險指令碼的無效JSON文字。eval函式將執行惡意的指令碼。

JSON直譯器 JSON.parse、JSON.stringify

使用JSON解析器可以防止像eval函式轉換JSON文字為物件那樣的安全隱患。JSON解析器只能辨識JSON文字,拒絕所有指令碼。提供了本地JSON支援的瀏覽器的JSON解析器將遠快於eval函式。

目前,Firefox、Opera、IE8以上版本也提供了本地JSON支援。其中,JSON直譯器提供的函式有:JSON.parse、JSON.stringify。

JSON.parse 函式

將JSON文字轉換為物件。
JSON.parse(text[, reviver])
引數
text
必選項。要轉換為物件的JSON文字。
reviver
可選項。該引數是個替換函式。在轉換中,遍歷的每個節點,都將執行該函式,該函式的返回值將替代轉換結果的相應節點值。

JSON.stringify 函式

將物件轉換為JSON文字。
JSON.stringify(value[, replacer[, space]])
引數
text
必選項。要轉換為JSON文字的物件。
reviver
可選項。該引數是個替換函式。在轉換中,遍歷的每個節點,都將執行該函式,該函式的返回值將替代轉換結果的相應節點值。
space
可選項。格式化輸出JSON文字縮排的空格數量。如果不提供該引數將不會格式化輸出。
引數reviver的委託型別
reviver(key, value)
reviver函式的中的this是當前所遍歷到的節點的父節點。當所遍歷的是根節點的時候,父節點是個Object物件,根節點是該物件的一個屬性,屬性名是空字串。
引數
key
當父節點是陣列Object,key為陣列索引,否則key為Object屬性名。
value
節點值。
注:JSON不支援迴圈資料結構。

jQuery.parseJSON( jsonTex )

jQuery中也有將字串轉為JSON格式的方法jQuery.parseJSON( json ),接受一個標準格式的 JSON 字串,並返回解析後的 JavaScript (JSON)物件。當然如果有興趣可以自己封裝一個jQuery擴充套件,jQuery.stringifyJSON(obj)將JSON轉為字串。

1:JS物件轉換成為JSON 

var   jsonData = {};
jsonData.MainCmdID = 1;
jsonData.SubCmdID = 1;
var toStr = JSON.stringify(jsonData);
alert(toStr);

例子:

var student = new Object(); 
student.name = "Lanny"; 
student.age = "25"; 
student.location = "China"; 
var json = JSON.stringify(student); 
alert(json); 


2通過 JSON 字串來建立物件  :

var txt=(JSON字串)

obj = JSON.parse(txt);

<html>
<body>
<h2>通過 JSON 字串來建立物件</h3>
<p>
First Name: <span id="fname"></span><br /> 
Last Name: <span id="lname"></span><br /> 
</p> 
<script type="text/javascript">
var txt = '{"employees":[' +
'{"firstName":"Bill","lastName":"Gates" },' +
'{"firstName":"George","lastName":"Bush" },' +
'{"firstName":"Thomas","lastName":"Carter" }]}';
obj = JSON.parse(txt);
document.getElementById("fname").innerHTML=obj.employees[1].firstName 
document.getElementById("lname").innerHTML=obj.employees[1].lastName 
</script>
</body>
</html>

結果:

通過 JSON 字串來建立物件

First Name: George
Last Name: Bush