JavaScript Object Notation (JSON,簡稱 JSON,發音與人名「Jason」相似),是一種資料共享格式。顧名思義,JSON 源自於 JavaScript,但它並非唯一允許使用它的程式碼專有者。事實上,許多其他程式語言也都可以使用它,包括 Ruby, PHP, Python 和 Java.
當獨立存在時,JSON 檔案會使用 .json 副檔名,但作為一種易於在網頁伺服器和用戶端(或瀏覽器)之間傳輸的格式,它也可以被定義為 .html 格式。在這種情況下,它既可以是一個分配給變數的物件,也可以是出現在引號內的 JSON 字串。
JSON 是 XML 的良好替代方案,因為它更具可讀性,且需要最少的格式化。本教學將向您介紹 可以儲存在 JSON 檔案中的資料,以及該格式的一般語法和結構。
結構 & 語法
JSON 物件是一種利用大括號來表示鍵值對的資料格式。在處理 JSON 時,您最常會看到它在 .json 檔案中呈現,但在程式的上下文中,它也可能以字串或 JSON 物件的形式存在。
以下是 JSON 物件外觀的範例:

雖然這是一個相當簡短的範例,且 JSON 物件可以長得多,但它準確地展示了該格式通常是如何設定的:兩端各有一個大括號(或花括號),中間填滿了鍵值對。JSON 中的大部分資料都封裝在 JSON 項目中。
有一個冒號分隔鍵值對(“key” : “value”)。這些鍵值對中的每一個都由逗號分隔,作為列表的不同成員。這導致 JSON 格式的中間部分以下列方式呈現:“key” : “value”, “key” : “value”, “key” : “value”。在上述範例中,"name" : "Akshay" 例如是第一個鍵值對。
每個物件中的鍵必須是唯一的,可以呈現為任何有效的字串,並用雙引號括起來(“key”),並且總是位於冒號的左側。雖然鍵字串中允許有空格(例如在 “first name” 中),但從程式設計的角度來看,這在存取方面確實帶來了更具挑戰性的方法。因此,通常採用的程式設計實踐是用底線代替鍵中的空格(“first_name”).
JSON 中的值位於冒號的右側。在最基本的粒度上,這些必須是以下 6 種特定資料類型之一:
- 數字
- 物件
- 陣列
- 字串
- 真或假(布林值)
- Null
下一節將介紹 JSON 物件陣列中更複雜的資料類型,傳入 JSON 的每個值都將保留其語法。換句話說,字串將繼續出現在引號中,而數值則不會。
按照慣例,JSON 格式通常以多行格式列出。然而,它也可以被格式化為單行:

當遇到 JSON 字串或在另一種檔案類型中時,這種格式化類型更為常見。在處理龐大的資料集時,將冒號 and 鍵值對寫在單獨的行上可以使列表對人類眼睛來說更具可讀性,因為 JSON 缺乏空格的輔助分隔:

雖然 JSON 物件與 JavaScript 相似,但請務必記住它們是不同的格式。雖然 JavaScript 允許使用函式,但 JSON 不允許。JSON 如此有價值的原因在於它的跨語言相容性,允許所有程式設計平台對其進行解析。
到目前為止,我們只看到了最簡單形式的 JSON 格式,但當它包含巢狀物件和陣列時,它可以以階層式且更複雜的方式演變。在下一節中,我們將探討更進階的 JSON。
利用複雜的 JSON 類型
除了巢狀陣列之外,JSON 還可以儲存巢狀物件。這些物件和陣列將作為鍵的值進行傳輸,並且它們將與鍵相關聯以形成鍵值對。
- 巢狀物件的形成
在以下 users.json 檔案圖片,這四個使用者中的每一個都有一個傳遞的巢狀 JSON 物件(“akshay”, “sam”, “Andrew”, “James”)。每個使用者都擁有自己的巢狀鍵(“location” 和 “username”):

高亮顯示的部分代表第一個巢狀物件的範例。在上述範例中,使用大括號為四個使用者中的每一個建立一個包含對應使用者名稱和位置詳細資訊的巢狀 JSON 物件。使用物件時,會使用逗號來根據特定的使用者屬性區分項目。
- 巢狀陣列的形成
作為值傳遞的 JavaScript 陣列也可以用來在 JSON 格式中巢狀化資料。這是透過使用 [ ](中括號)在陣列類型的末尾,這些陣列是包含獨特資料類型的結構化清單:

在上述範例的高亮部分中,由於中括號的存在,Akshays’s 的 2 個社群媒體個人資料網站和 2 個網站連結都用於巢狀資訊的陣列中。透過在 JSON 中以這種方式進行巢狀,我們可以在處理階層式和複雜的資料內容時獲得更大的靈活性。
- XML 比較
Extensible Markup Language (XML)提供了一種儲存資料的方法,機器和人類都可以存取。與 JSON 一樣,XML 可以被許多程式語言使用。與 JSON 不同,XML 包含明顯更多的文字,因此組合起來更複雜且耗時。雖然標準函數可以解析 JSON,但 XML 需要特定的 XML 解析器。最重要的是,XML 無法使用陣列。讓我們比較一下格式化為 XML 與 JSON 的相同資料:

XML 需要明顯更多的文字並且佔用更多空間。它還需要結束標籤,而 JSON 則緊湊得多且排列簡單。熟悉 HTML 的人可能會注意到 XML 在標籤使用上的相似之處。
在決定使用哪種格式之前,評估專案的範圍和需求總是很有幫助。JSON 較不冗長、更精簡,並且可以快速用於 AJAX 應用程式和其他情況。專案類型將有助於闡明最適合使用的資料結構。
深入了解 JSON
JSON 是一種通用且自然的格式,可以在多種程式語言中實作。您將能夠在以下頁面找到支援語言的完整清單:“介紹 JSON” 頁面。此外,解析和相容性資訊可以在以下內容中找到:“iQuery 函式庫。”
最後,您很可能不會經常編寫純 JSON。相反地,您會從資料來源中提取它,或將其他資料檔案轉換為 JSON。使用開源工具 Mr. Data Converter,您可以將試算表程式中找到的 CSV 或 tab 分隔資料轉換為 JSON。透過創用 CC 授權的 utilities-online.info 平台,您可以將 XML 轉換為 JSON,反之亦然。使用自動化軟體時,請仔細檢查報告以消除任何冗餘。
您也可以使用 JSONLint 來驗證您的 JSON,並使用 JFiddle 在將其他類型轉換為 JSON 格式時,在網頁開發環境中對其進行評估。
結論
獲得越來越多的 API 支援(包括 Twitter API),JSON 是一種輕量級的資料格式,可促進編輯、儲存和分享資料的簡易性。既然您不會產生自己的 .json 檔案,而是從其他管道接收它們,因此思考如何在程式中使用 JSON 比思考其結構更重要。
以下是來自我們的部落格 的更多資源,將有助於您使用 JavaScript 進行程式設計:
- 了解 原型和繼承在 JavaScript 中如何運作
- 詳細探索 如何將 JavaScript 新增至 HTML.
- 如果您正在建立自己的網頁應用程式,請參考 我們關於如何選擇最佳伺服器設定的指南.
祝您程式設計愉快!
留言
目前尚無留言。成為第一個留言的人吧。