1. 程式人生 > >JSON語法以及json與JavaScript物件的轉換

JSON語法以及json與JavaScript物件的轉換

 JSON是JavaScript的一個嚴格的子集,利用了JavaScript中的一些模式來表示結構化資料。理解JSON,最重要的是理解它是一種資料格式,而不是一種程式語言。JSON雖然利用了JavaScript的一些模式,但JSON並不從屬於JavaScript,很多程式語言都可以用JSON來傳遞資料。



 JSON的語法:

    學習JSON的語法,你只需知道以下三種類型的值。

 1.簡單值也就是JavaScript中的字串、數值、布林值、null。
  ①,JSON不支援JavaScript的undefined。
 
②,json字串必須用雙引號,不能使用單引號。
  在實際應用中,json更多地用來表示更復雜的資料結構,簡單值只是構成整個json資料的基本單元。

 2.物件和JavaScript物件很相似,但是也有幾個注意點。
  ①,json中物件的屬性需加上引號。(這是手工編寫json時最容易犯的錯)
  ②,json物件沒有宣告。

  ③,末尾沒有分號。

  舉個例子:

javascript物件字面量:
 	var JSobject = {
 		name :"wlk",
 		age : 22,
 		school : {
 			name : "muc",
 			locaton : "BeiJing"
 		}
 	};

 	json物件:
 	{                            //沒有宣告
 		"name" :"wlk",            
 		"age" : 22,              //json物件的屬性必須加上引號
 		"school" : {
 			"name" : "muc",
 			"locaton" : "BeiJing"
 		}
 	}                             //末尾沒有分號
  上面的json物件中有兩個name屬性,但由於它們分屬於不同的物件,所以沒有問題,但是同一個物件中決不能出現同名屬性。

 3.陣列 JSON的第二種複雜的資料型別就是陣列,同樣要注意JSON陣列沒有變數和分號。物件和陣列通常是JSON資料格式的最外層形式。
 比如:
 [                                   //以陣列為最外層形式
 	{
 		"name":"wlk",
 		"age":22
 	},
 	{
 		"name":"wang",
 		"school":{
 			"name":"MUC",
 			"location":"Beijing"
 		}
 	},
 ]


json文字與js物件的轉換:(詳解請解讀《JavaScript高階程式設計3》第565頁)

    ECMAScript5對解析json的行為進行了規範,定義了全域性物件JSON。
    全域性JSON物件有兩個方法:stringify()和parse()
    這兩個方法就能完成JavaScript物件與json文字之間的轉換。

JavaScript物件序列化為json文字:JSON.stringify()。
該方法可接受三個引數:
第一個引數是需要序列化的JavaScript物件。
第二個引數為可選引數,它是個過濾器,可以是陣列或函式。
第三個引數也為可選引數,用於控制結果中的縮排和空白符。傳第三個引數時,第二個引數也要傳,如果沒有過濾條件就傳null。
有些物件會定義有toJSON()方法,返回其自身的JSON資料格式。例如原生Date物件。我們當然也可以給自定義物件新增toJSON()方法。

json文字解析為JavaScript物件:JSON.parse()。
該方法可接受兩個引數:
第一個是要解析的json文字。
第二個是一個函式。它會對json資料的每個鍵值對做一些處理。比如日期字串經常要使用它進行日期的轉換。