JSON 是什麼
JSON(JavaScript Object Notation)是一種讓人和機器都能輕鬆讀取的資料格式。名字裡雖有「JavaScript」,但不依賴特定程式語言,Python、Java、Go、PHP 等主流語言都能處理。
JSON 源自 JavaScript 物件字面量語法。2000 年代初期 Douglas Crockford 整理為獨立規範,隨後由 IETF 發布為 RFC 8259在新分頁中開啟、Ecma International 制定 ECMA-404在新分頁中開啟。兩份文件定義相同語法,符合規範的解析器間可無縫互通。
當時主流格式是 XML 但寫起來冗長,JSON 以簡潔語法迅速普及。手邊有 JSON 想確認語法或整理排版時,你可以貼到 FormatArc 的 JSON 格式化器。所有處理在瀏覽器內完成,輸入的資料不會傳輸到外部。
與其他資料格式的差異
JSON 是眾多資料格式之一。跟 XML、CSV、YAML 對比後,它的定位就清楚了。
| 格式 | 主要用途 | 特點 |
|---|---|---|
| JSON | API、資料交換 | 以機器處理為前提,語法簡單、速度快 |
| XML | 傳統系統、SOAP | 冗長但 schema 表達力強 |
| CSV | 試算表、ETL | 適合表格資料,不支援巢狀 |
| YAML | 設定檔案 | 方便人編輯,但解析速度較慢 |
JSON 被廣泛採用,是因為它處於「機器處理高效、人也能讀能寫」的平衡點。主流語言都將 JSON 解析器納入標準函式庫,跨語言互操作性強。
JSON 基本語法
物件
用大括號 {} 包住,鍵值對以冒號(:)分隔。鍵必須是雙引號包住的字串。
{
"name": "林小明",
"age": 30,
"city": "台北"
}
陣列
用方括號 [] 包住,值以逗號(,)分隔。可混用不同型別,但實務上通常保持同一型別。
["蘋果", "香蕉", "柳丁"]
JSON 的六種資料型別
字串
雙引號包住,特殊字元用 escape sequence(\n、\t)表示。
"greeting": "你好"
數字
整數和浮點數直接寫,不需引號。JSON 不支援 NaN、Infinity 或前導零(如 007)。
42
3.14
-10
布林值
只有 true 和 false,True、TRUE、1 均無效。
null
表示值不存在,只寫小寫。
物件與陣列的巢狀
物件裡放陣列、陣列裡放物件,自由組合:
{
"user": {
"name": "林小明",
"hobbies": ["讀書", "跑步"],
"address": {
"city": "台北",
"district": "信義區"
}
}
}
這種靈活的巢狀結構是 JSON 能表達複雜資料的原因。
JSON 的使用場景
Web API 資料交換
REST API 和 GraphQL 的回應格式,JSON 基本上是預設標準。用瀏覽器 fetch 函式從伺服器取資料,回傳的多半就是 JSON。
{
"status": "ok",
"data": {
"id": 1,
"title": "第一篇貼文"
}
}
設定檔案
package.json(Node.js)、tsconfig.json(TypeScript)、VS Code 的 settings.json 等設定檔都廣泛使用 JSON,因為人好讀好寫、程式也好解析。
資料儲存與日誌
NoSQL 資料庫(如 MongoDB)以近似 JSON 的格式(BSON)儲存資料。結構化日誌也越來越多使用 JSON Lines(每行一個 JSON 物件)。
表格資料轉換
從試算表匯出 CSV 後要餵給 API 或應用程式時,常需轉成 JSON。兩種格式結構不同,都了解會比較方便。
使用 JSON 時的注意事項
不能寫註解
JSON 沒有註解語法,//、/* */、# 都不行。想留備忘錄得用 "_comment" 變通,或改用 YAML、JSONC。
不能有尾隨逗號
最後一個元素後多一個逗號,JavaScript 可以接受但 JSON 會報錯。
鍵必須用雙引號
JavaScript 裡 { name: "林小明" } 可以省引號,JSON 必須寫 { "name": "林小明" }。
最上層只能有一個值
兩個物件並列不是合法 JSON,要放多個就包成陣列。
格式凌亂的 JSON 不僅難讀也是語法錯誤的常見原因。JSON 格式化器 可一鍵對齊排版並檢查語法。進一步的排版與格式化實務技巧,詳見 JSON 排版線上工具。
在程式碼中使用 JSON
主流語言都內建或透過標準函式庫支援 JSON。程式碼裡的 JSON 操作只有兩件事:把 JSON 文字解析成可處理的資料結構,再把資料結構序列化回 JSON 文字。
JavaScript 和 TypeScript 用內建的 JSON 物件:
// 把 JSON 字串解析成物件
const data = JSON.parse('{"name": "林小明", "age": 30}');
// 把物件轉成 JSON 字串
const json = JSON.stringify(data, null, 2);
stringify 後面的參數 null, 2 用來加入縮排,讓輸出可讀。不傳它們會得到一行緊湊的文字,適合網路傳輸,但不適合閱讀。
Python 用標準函式庫的 json 模組:
import json
data = json.loads('{"name": "林小明", "age": 30}')
text = json.dumps(data, indent=2)
各語言的寫法不同,但模式一致:解析成原生資料結構、處理、再序列化回字串。
格式化與驗證 JSON
從 API 回應或日誌檔案取得一段壓成一行的 JSON,幾乎無法閱讀。格式化會加上縮排與換行,讓結構一目了然。
可以像上面那樣在程式碼中處理,也可以把原始 JSON 貼到 JSON 格式化器,立刻得到排版整齊的版本。它同時會檢查語法錯誤,排查格式有問題的回應時很好用。所有處理都在瀏覽器內完成,資料不會傳輸到外部。
如何開啟和建立 JSON 檔案
JSON 檔案其實就是一個文字檔。不需要安裝任何軟體,用任意文字編輯器(Windows 的記事本、macOS 的文字編輯)就能檢視內容。如果雙擊後開啟的是瀏覽器,可以把它拖進編輯器視窗,或在編輯器的「開啟檔案」選單中指定副檔名。像 VS Code 或 Sublime Text 這樣的程式碼編輯器會做語法標示,括號不匹配的地方更容易發現。想快速看到格式化後的結果,貼到 JSON 格式化器中即可,處理過程都在瀏覽器內完成。
建立新的 JSON 檔案也一樣:在文字編輯器中寫好 JSON,儲存時加上 .json 副檔名即可。該副檔名在 RFC 8259 第 11 節中向 IANA 註冊。
儲存時請選擇 UTF-8。RFC 8259 第 8.1 節規定,在系統之間交換的 JSON 文字必須用 UTF-8 編碼,並且開頭不能加 BOM。如果編輯器預設加 BOM 導致語法錯誤,請參考 JSON 解析錯誤指南中的 BOM 部分。
語法快速參考
下面是同時展示全部 6 種資料型別的完整 JSON 文件:
{
"string": "你好",
"number": 42,
"float": 3.14,
"boolean": true,
"nullValue": null,
"array": [1, 2, 3],
"object": {
"nested": "value"
}
}
這就涵蓋了全部 6 種型別。看得懂這份文件,就看懂任何 JSON——剩下的只是組合。
小結
- JSON 是不依賴特定語言的輕量資料交換格式
- 物件(
{})與陣列([])兩種結構是基礎 - 資料型別共六種:字串、數字、布林值、null、物件、陣列
- 廣泛用於 Web API 回應與設定檔案
- 不能寫註解、不能尾隨逗號等限制需注意
- 整理排版與語法檢查可用 JSON 格式化器輔助

