JSON 與 XML 之間有何區別?

JSON 和 XML 是應用程式之間的資料交換中使用的資料表示。JSON 是一種開放式資料交換格式,可供人員和機器讀取。JSON 獨立於任何程式設計語言,並且在各種不同的應用程式中是一種常見的 API 輸出。XML 是一種標記語言,可提供規則來定義任何資料。它使用標記來區分資料屬性和實際資料。雖然這兩種格式都用於資料交換,但 JSON 是更新、更靈活且更受歡迎的選擇。

閱讀有關 JSON 的內容 »

閱讀有關 XML 的內容 »

JSON 與 XML 之間有什麼相似之處?

JSON 和 XML 均採用資料序列化格式。它們允許您以標準化方式,在不同的應用程式、平台或系統之間交換資料。

不同的程式設計語言和平台以不同的方式呈現相同的資料。例如,Java 應用程式使用資料物件,而 Python 應用程式則使用字典,來存放相同的真實世界實體的相關資訊。若要在它們之間交換資料,您可以執行下列步驟:

  1. 將 Java 物件轉換為 XML 或 JSON
  2. 透過網路傳輸 XML 或 JSON 檔案
  3. 將 XML 或 JSON 重新轉換為 Python 字典

 

轉換內建於語言庫中,這讓程式設計人員可以使用 API 編寫相互通訊的應用程式。此外,這兩種格式均為自我描述,因此,您可以在任何文字編輯器中讀取和編輯 JSON 和 XML 檔案。

雖然 XML 是一種較舊的技術,但仍然普遍使用 JSON 和 XML。

資料呈現:JSON 與XML

XML 以樹狀結構模式呈現資料,而 JSON 則使用鍵值對。下列範例以兩種資料呈現來顯示相同的資訊。 

範例:JSON 文件

下列範例以 JSON 顯示三位來賓的姓名。

{"guests":[

  { "firstName":"John", "lastName":"Doe" },

  { "firstName":"María", "lastName":"García" },

  { "firstName":"Nikki", "lastName":"Wolf" }

]}

範例:XML 文件

下列範例以 XML 格式顯示三位來賓的姓名。

<guests>

  <guest>

    <firstName>John</firstName> <lastName>Doe</lastName>

  </guest>

  <guest>

    <firstName>María</firstName> <lastName>García</lastName>

  </guest>

  <guest>

    <firstName>Nikki</firstName> <lastName>Wolf</lastName>

  </guest>

</guests>

主要差異:JSON 與XML

雖然 JSON 和 XML 有類似的目的,但一些核心差異使其各具特色。了解這些差異將有助於您決定哪種格式對您的使用案例更有幫助。

歷史

XML Working Group 於 1996 年設想 XML,並於 1998 年發佈其初始版本。他們從標準通用標記語言 (SGML) 衍生出 XML。在 1998 年引入 HTML 之後,他們開發了 XML 做為資料序列化工具。

Douglas Crockford 和 Chip Morningstar 於 2001 年發佈了 JSON。他們從 JavaScript 衍生出 JSON。

格式

JSON 使用鍵值對來建立映射式結構。索引鍵是一個字串,用於識別鍵值對。值是您賦予該索引鍵的資訊。例如,假設 “NumberProperty”: 10。其中,“NumberProperty” 是索引鍵,10 為值。

相較之下,XML 是一種標記語言,即 SGML 的子集,其結構類似於 HTML。它存放採用樹狀結構的資料,呈現您可以關注和閱讀的資訊層。在提供有關子項元素的資訊之前,樹狀結構以根 (父項) 元素開始。這種擴展式結構有助於載入大量變數和動態組態。 

語法

JSON 中使用的語法更緊湊,並且更易於寫入和讀取。它可讓您輕鬆定義物件。

XML 更詳細,而且會將某些字元替代為實體參照。例如,XML 會使用實體參照 &it;,而不是 < 字元。此外,XML 還使用結束標記,這使其 JSON 更長。

剖析

您必須使用 XML 剖析器來剖析 XML,這通常會減慢和複雜化程序。

您可透過標準 JavaScript 函數來剖析 JSON,這會更加便捷易用。由於其語法和檔案大小差異,相較於 XML,您還可以更快地剖析 JSON。

結構描述文件

結構描述文件描述了檔案的用途,顯示您應使用該文件做什麼。

XML 文件在標頭中具有其結構描述連結。該結構描述也採用 XML 格式,允許您讀取您應期望在檔案中尋找的內容。然後,您可以根據結構描述來驗證文件,並檢查所有內容是否已正確載入且沒有錯誤。

JSON 也允許您使用結構描述。但它們更簡單,且具有更大的靈活性。

資料類型支援

JSON 僅支援有限範圍的資料類型,如字串、數字和物件。JSON 還可支援布林值陣列,而 XML 無法在不新增額外標記的情況下完成。

但是,XML 更加靈活,並且支援複雜的資料類型,例如二進位資料和時間戳記。 

易於使用

做為一種標記語言,XML 更複雜,而且需要標記結構。

相較之下,JSON 是一種從 JavaScript 擴展的資料格式。它不使用標記,這使得它更緊湊,並且更易於人類閱讀。JSON 能夠以較小的檔案大小呈現相同的資料,以便加快資料傳輸。

安全性

JSON 剖析比 XML 更安全。

XML 的結構容易受到未經授權修改的影響,這會產生稱為 XML 外部實體隱碼攻擊 (XXE) 的安全風險。此外,它還容易受到非結構化外部文件類型宣告 (DTD) 的影響。您可以在傳輸中關閉 DTD 功能,來避免這兩個問題。 

使用時機:JSON 與XML

如果您想要存放多個不同的資料類型及眾多變數,則 XML 是更好的選擇。相較於 JSON,XML 會更有效率地檢查複雜資料中的錯誤,因為 XML 專注於以機器可讀的方式存放資料。此外,它還擁有更成熟的工具集和資料庫,並且能夠更好地與舊式系統配合使用。

 

另一方面,JSON 專為資料交換而設計,並且提供了一種更單一、更簡潔的格式。此外,它還改善了效能和通訊速度。

一般而言,JSON 是 API、行動應用程式和資料儲存的較佳選擇,而 XML 則更適合需要資料交換的複雜文件結構。

差異摘要:JSON 與XML

 

JSON

XML

含義

JSON 是指 JavaScript 物件標記法。

XML 是指可擴展標記語言。 

歷史

Douglas Crockford 和 Chip Morningstar 於 2001 年發佈了 JSON。

XML Working Group 於 1998 年發佈了 XML。

格式

JSON 使用具有鍵值對的映射式結構。

XML 將資料儲存在樹狀結構中,針對不同的資料類別設有命名空間。

Syntax

JSON 的語法更緊湊,並且更易於讀取和寫入。

XML 的語法替代了實體參照的一些字元,使其更加冗長。

剖析

您可以使用標準 JavaScript 函數來剖析 JSON。

您需要使用 XML 剖析器來剖析 XML。

結構描述文件

JSON 很簡單,而且更靈活。

XML 很複雜,而且不那麼靈活。

資料類型

JSON 支援數字、物件、字串和布林值陣列。

XML 支援所有 JSON 資料類型和其他類型,例如布林值、日期、影像和命名空間。

易用性

JSON 具有較小的檔案大小和更快的資料傳輸速度。

XML 標記結構在寫入和讀取方面更複雜,因此會產生龐大的檔案。

安全性

JSON 比 XML 更安全。

使用 XML 時,您應關閉 DTD,以減輕潛在的安全風險。

AWS 如何支援您的 JSON 和 XML 需求?

所有 AWS (Amazon Web Services) 資料整合服務都能處理 JSON 和 XML 檔案。以下是三種相關的 AWS 服務:

  • AWS Glue 是一種無伺服器資料整合服務,您可使用它來探索、準備和合併資料,用於分析、機器學習及應用程式開發。
  • Amazon SQS (Simple Queue Service) 是全受管訊息佇列服務,可用來在任何磁碟區的軟體元件之間傳送、儲存和接收訊息。Amazon SQS 訊息可包含最多 256 KB 的文字資料,包括 XML、JSON 和無格式文字。
  • Amazon Kinesis 可讓您輕鬆地即時收集、處理和分析串流資料。您可以及時獲得洞察,並快速對新資訊做出回應。您可以使用 Kinesis,即時串流、轉換及分析 XML 資料。

此外,Amazon DocumentDB (with MongoDB compatibility) 是一個全受管原生 JSON 文件資料庫。Amazon DocumentDB 可讓您輕鬆且經濟實惠地以幾乎任何規模操作關鍵文件工作負載,而無需管理基礎架構。

立即建立免費帳戶,開始使用 AWS 上的 JSON 和 XML。