JSON對象和JavaScript對象直接量的區別--不同之處


 JSON對象和JS對象直接量

在工作當中,我們總是可以聽到人說將數據轉換為JSON對象,或者說把JSON對象轉換為字符串之類的話,下面是關於JSON的具體說明。

 JSON對象並不是JavaScript對象字面量(Object Literals)

很多人錯誤的將JSON認為是JavaScript當中的對象字面量(object Literals),原因非常簡單,就是因為它們的語法是非常相似的,但是在ECMA中明確的說明了。JSON只是一種數據交互語言,只有我們將之用在string上下文的時候它才叫JSON。

序列化與反序列化

2個程序(或服務器、語言等)需要交互通信的時候,他們傾向於使用string字符串因為string在很多語言里解析的方式都差不多。復雜的數據結構經常需要用到,並且通過各種各樣的中括號{},小括號(),叫括號<>和空格來組成,這個字符串僅僅是按照要求規范好的字符。

為此,我們為了描述這些復雜的數據結構作為一個string字符串,制定了標准的規則和語法。JSON只是其中一種語法,它可以在string上下文里描述對象,數組,字符串,數字,布爾型和null,然后通過程序間傳輸,並且反序列化成所需要的格式。

常見的數據流行交互格式有YAMLXML、和JSON都是常用的數據交互格式。

字面量
引用Mozilla Developer Center里的幾句話,供大家參考:

  1. 他們是固定的值,不是變量,讓你從“字面上”理解腳本。 (Literals)
  2. 字符串字面量是由雙引號(")或單引號(')包圍起來的零個或多個字符組成的。(Strings Literals)
  3. 對象字面量是由大括號({})括起來的零個或多個對象的屬性名-值對。(Object Literals)

什么時候會成為JSON

JSON是設計成描述數據交換格式的,他也有自己的語法,這個語法是JavaScript的一個子集。
{ "prop": "val" } 這樣的聲明有可能是JavaScript對象字面量也有可能是JSON字符串,取決於什么上下文使用它,如果是用在string上下文(用單引號或雙引號引住,或者從text文件讀取)的話,那它就是JSON字符串,如果是用在對象字面量上下文中,那它就是對象字面量。

例如:

// 這是JSON字符串
var foo = '{ "prop": "val" }';

// 這是對象字面量
var bar = { "prop": "val" };

而且要注意,JSON有非常嚴格的語法,在string上下文里{ "prop": "val" } 是個合法的JSON,但{ prop: "val" }和{ 'prop': 'val' }確實不合法的。所有屬性名稱和它的值都必須用雙引號引住,不能使用單引號。

JS當中的JSON對象

目前,JSON對象已經成為了JS當中的一個內置對象,有兩個靜態的方法:JSON.parse和JSON.stringify。

JSON.parse主要要來將JSON字符串反序列化成對象,JSON.stringify用來將對象序列化成JSON字符串。老版本的瀏覽器不支持這個對象,但你可以通過json2.js來實現同樣的功能。

例如:

// 這是JSON字符串,比如從AJAX獲取字符串信息
var my_json_string = '{ "prop": "val" }';

// 將字符串反序列化成對象
var my_obj = JSON.parse( my_json_string );

alert( my_obj.prop == 'val' ); //  提示 true, 和想象的一樣!

// 將對象序列化成JSON字符串
var my_other_json_string = JSON.stringify( my_obj );

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM