iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
Software Development

軟體開發養成計畫:以小程式實作深化開發能力系列 第 17

[Day17]JSON、XML、YAML:資料交換三兄弟

  • 分享至 

  • xImage
  •  

開場

在早期,程式開發者常常需要針對不同系統設計一套專屬的資料格式,不僅耗時費力,也很容易出錯。直到 JSON、XML、YAML 等資料格式的出現,大家才終於能依循共同規則來封裝資料,讓資料交換變得更加簡單、高效。

延續昨天我們在天氣查詢小程式中實作的內容,API 傳回的資料格式就是 JSON。但你有沒有想過:為什麼程式界會同時存在這麼多種資料格式?它們各自有什麼獨特的優勢?而在不同情境下,我們又該如何選擇最合適的格式呢?

今天,就讓我們一起深入比較 JSON、XML、YAML 這三種主流的資料交換格式,來看看它們的特色與優缺點吧!

1.為什麼需要資料交換格式

我們可以想像一下,在程式的世界裡,資料交換格式扮演的角色為翻譯官,不同的程式語言像是Python、JavaScript、Java每個處理資料的方式都不一樣,就像是不同的國家有各自的語言。當一個程式想把資料傳送給另一個程式時,如果沒有一個共通的格式,它們就無法理解對方傳來的資料是什麼,導致溝通失敗。

JSON、XML、YAML 等資料交換格式的出現,「語言規則」便誕生了,這讓所有程式都能遵循同樣的標準來打包、傳輸和解析資料。如此一來,無論是網頁前端(使用 JavaScript)、後端伺服器(使用 Python),還是手機 App(使用 Java),都能輕鬆地互相傳遞資訊,讓整個系統運作得更順暢。
統整了一下資料交換格式的主要目的:

  • 統一標準:讓不同程式語言和系統能用相同的格式進行溝通。
  • 提高效率:避免為每個不同的系統客製化一套資料格式,節省開發時間。
  • 確保準確性:降低因格式不一致而導致的資料解析錯誤。

2.JSON(JavaScript Object Notation)

JSON 是一種輕量級的資料交換格式,最初是從 JavaScript 語法演變而來的。它以**鍵值對(key-value pairs)**的方式儲存資料,就像我們常使用的字典或物件一樣。JSON 的語法非常簡潔易懂,可讀性高,因此廣受開發者歡迎,特別是在 Web 服務和 API 傳輸中,幾乎成為了主流標準。
格式範例:

{
  "city": "Taipei",
  "temperature": 28,
  "weather": "Sunny"
}

3.XML(eXtensible Markup Language)

XML 是一種可擴展的標記語言,它使用類似 HTML 的標籤(tags)來定義資料結構。每個標籤都可以自訂,因此 XML 的彈性極高,可以描述非常複雜的資料。XML 的設計初衷是為了讓資料具有自我描述性,讓使用者光看檔案就能理解其內容。
格式範例:

<weather>
  <city>Taipei</city>
  <temperature>28</temperature>
  <condition>Sunny</condition>
</weather>

4.YAML(YAML Ain’t Markup Language)

YAML 是一種專注於可讀性的資料格式,特別適合用來撰寫設定檔。它使用**縮排(indentation)**來表示資料的層次結構,類似於 Python 的語法。YAML 的語法比 JSON 更精簡,捨棄了許多括號和引號,讓設定檔看起來更乾淨俐落。
格式範例:

weather:
  city: Taipei
  temperature: 28
  condition: Sunny

5.三者比較表格

特性 JSON XML YAML
可讀性 中等 極高
檔案大小 輕量 較大 輕量
語法 鍵值對、大括號、中括號 標籤 (Tags) 縮排、鍵值對
主要應用 Web API、資料傳輸 舊型 Web 服務、設定檔 設定檔、自動化腳本
易用性 中等

總結是JSON、XML、YAML 各自有擅長的領域。JSON 輕巧靈活,是 API 的首選;XML 結構嚴謹,適合複雜資料;而 YAML 則因其高可讀性,在設定檔中表現出色。選擇正確的格式,能讓我們的開發事半功倍!

明天,我們將應用今天所學到的知識,進入 Day 18 的實作環節!
我們將一起打造一個 「英文單字背誦小程式」,屆時會親手操作這些資料格式,讓理論與實務完美結合。敬請期待!


上一篇
[Day16]查詢今天要不要帶雨傘:Python 串接天氣 API
系列文
軟體開發養成計畫:以小程式實作深化開發能力17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言