JavaScript Weird Part (25) - JSON 與物件實體

這一節要繼續學習物件實體,還有一些使用 JSON 的時候經常遇到的誤解。JSON (avaScript 物件表示法;JavaScript Object Notation) ,受到 JavaScript 物件實體語法啟發,看起來和物件實體語法非常類似,所有常常被誤認為是同一個東西,所以遇到同樣的錯誤。

JSON (avaScript 物件表示法;JavaScript Object Notation)

如果我建立一個物件實體,假設它有很多屬性,這在 JavaScript 是完全有效的

1
2
3
4
var objectLiteral={
firstname:'Mary',
isAProgrammer:true
}

由於網路資料的傳輸格式很多,但是處理下載的時候,下載速度和使用的頻寬有關。像是 XML,會有一些額外的符號,讓資料變得很龐大,只是傳送一點資料就必須要傳 2 次屬性名稱。資料越多浪費越多頻寬。

1
2
3
<obeject>
<firstname>Mary</firstname>
</object>

所以人們開始改用 JSON 這種資料傳輸格式,這只是一種資料字串,雖然看起來很像物件實體語法,可是有一些小差異。例如屬性需要被包在引號裡面。以下是一個有效的物件實體語法,因為在 JavaScript 的物件實體語法裡面,屬性可以選擇被包在引號裡面。但在 JSON 裡面,屬性「一定」要被包在引號裡面。所以如果有解析 JSON 的程式,像是 PHP 或 ASP.NET 的伺服器技術,就預期屬性一定要被包含在括號裡面。

1
2
3
4
{
"firstname":"Mary",
"isAProgrammer":"true"
}

JavaScript 內建轉換 JSON 格式的功能

技術上,JSON 是物件實體語法的子集合,代表只要在 JSON 有效的,在物件實體語法就是有效的。但不是所有物件實體語法在 JSON 格式都是有效的。所以 JSON 的規則比較嚴格。所以 JSON (avaScript 物件表示法;JavaScript Object Notation) 並不是 JavaScript 的一部分,但因為它可以簡單讓 JavaScript 解析它,所以相當受到歡迎,所以 JavaScript 有一些內建的功能可以轉換這 2 者。可以讓任何物件,變成 JSON 字串。

1
2
3
4
5
6
var objectLiteral={
firstname:'Mary',
isAProgrammer:true
}

console.log(JSON.stringify(objectLiteral));

也可以再把 JSON 字串轉換回物件

1
2
var jsonValue = JSON.parse('{ "firstname": "Mary", "isAProgrammer": true }');
console.log(jsonValue);

JSON 和物件實體看起來很像,但其實 JSON 的對於屬性使用括號的規則比較嚴格。不過 JavaScript 有讓人在兩者之間轉換的功能,因此也很容易轉換從瀏覽器下載的資料。或者像是當 Node.js 在伺服器端使用 JavaScript 的時候,接收 JSON 格式。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2020 CYC'S BLOG All Rights Reserved.

UV : | PV :