指南

什麼是 JSON?附範例的白話指南

JSON(JavaScript Object Notation)是一種簡單的文字格式,用來以名稱配對值的方式寫下結構化資料,例如一位客戶、一筆訂單或一份產品清單。它對人類來說容易閱讀,對程式來說也容易產生與解析。當 App 與服務透過網路交換資料時,JSON 是目前最常見的格式。

用 AI 製作 App 時為什麼 JSON 很重要

即使你從來不寫程式,也會頻繁遇到 JSON:

  • API。 當你的 App 畫面從後端載入資料,或你的後端呼叫金流、郵件或 AI 服務時,資料通常會以 JSON 傳輸。請參閱什麼是 API。
  • 設定檔。 許多專案設定檔都是 JSON,例如 package.json,它列出一個 JavaScript 專案所依賴的套件。
  • 資料庫。 Postgres 可以把 JSON 存在一個欄位中(jsonb 類型),適合用來存放不適合整齊列與欄的資料。請參閱什麼是 Postgres。
  • AI 輸出。 當你希望 AI 模型回傳程式能使用的內容,例如一份標籤清單或擷取出的發票欄位,通常會要求它輸出 JSON。
  • 錯誤訊息與紀錄。 許多錯誤都是以 JSON 形式出現的,閱讀它通常是找出問題最快的方法。

會閱讀 JSON,你就能檢查 App 實際收到了什麼、發現遺漏的欄位,並且向 AI 製作工具精確描述問題。

日常比喻

想像一張紙本表單:姓名:,電話:,電子報:☐ 是 ☐ 否。 每個填寫的地方都是一個標籤加上旁邊的值。JSON 就是把這張表單用文字寫出來,採用嚴格的排版,讓電腦無需猜測就能讀取。就像表單一樣,JSON 也可以有巢狀的區塊(例如包含街道、城市與郵遞區號的地址區塊),以及清單(例如好幾組電話號碼)。

JSON 的樣子

以下是一筆 JSON 格式的預約資料:

{
  "id": 5001,
  "customer": "Lena Park",
  "service": "Haircut",
  "startsAt": "2026-10-03T14:00:00Z",
  "price": 35.5,
  "paid": false,
  "notes": null,
  "extras": ["beard trim", "hot towel"],
  "contact": {
    "email": "lena@example.com",
    "phone": "+44 20 7946 0000"
  }
}

閱讀方式:

  • 大括號 { } 包住一個物件,也就是一組名稱與值的配對。
  • 每一組配對的格式是 "名稱": 值,並以逗號分隔。
  • 方括號 [ ] 包住一個陣列,也就是有順序的清單。
  • 物件與陣列可以互相巢狀包含,就像 contact 與 extras 一樣。

六種值類型

JSON 只有六種值類型。這份小清單正是它能在各處通用的重要原因之一。

類型範例說明
字串(文字)"Lena Park"一律使用雙引號
數字35.5、-2、1e6不加引號;不能有貨幣符號
布林值true、false小寫,不加引號
Nullnull表示「沒有值」
物件{ "city": "Leeds" }具名稱的值
陣列[1, 2, 3]有順序的清單;項目可以是任何類型

JSON 沒有日期類型。日期通常以字串表示,常用的是上面所示的 ISO 8601 格式(2026-10-03T14:00:00Z,其中 Z 代表 UTC)。大家約定好同一種格式,就能避免整類時區相關的錯誤。

嚴格的規則(錯誤的來源)

JSON 比外表看起來更不寬容。以下這些都是無效的:

{ name: "Lena" }            ← 鍵沒有使用雙引號
{ 'name': 'Lena' }          ← 使用單引號
{ "a": 1, "b": 2, }         ← 結尾逗號
{ "a": 1 "b": 2 }           ← 缺少逗號
{ "a": 1 // comment }       ← 不允許註解

你會遇到的大多數「Unexpected token」錯誤,都屬於上述其中一種。JSON 驗證或格式化工具會準確指出出錯的那一行。

實際範例:JSON 在 App 中的流動

一位客戶在美髮沙龍 App 中預約剪髮。以下是 JSON 出現的地方:

  1. 預約表單把這段內容送到 App 的後端:
{ "service": "Haircut", "startsAt": "2026-10-03T14:00:00Z", "name": "Lena Park" }
  1. 後端把預約儲存到資料庫中,並回傳狀態 201 Created 以及:
{ "id": 5001, "status": "confirmed" }
  1. 如果該時段已被預約,後端可能改為回傳狀態 409 Conflict 以及:
{ "error": "slot_taken", "message": "That time was just booked. Please pick another." }

頁面會讀取 status 或 error,並顯示正確的訊息。如果頁面顯示的是空白畫面,打開瀏覽器的開發者工具(Network 分頁)就能看到這段 JSON,通常是找出問題最快的線索。

關鍵術語

術語意義
鍵(Key)名稱與值配對中的名稱,例如 "email"。
解析(Parse)把 JSON 文字轉換成程式可以使用的資料。
序列化/字串化(Serialize / stringify)把資料轉換成 JSON 文字,以便傳送或儲存。
承載資料(Payload)請求或回應中傳送的資料。
結構定義(Schema)描述資料應有的形狀,包括有哪些欄位、各是什麼類型。JSON Schema 是撰寫它的標準方式。
JSONBPostgres 的二進位 JSON 欄位類型,可以建立索引並查詢。
NDJSON / JSON Lines每行一個 JSON 物件,常見於紀錄檔與串流資料。

常見迷思

  • 「JSON 就是 JavaScript。」 它的語法源自 JavaScript,但它與語言無關;Python、Java、C#、Go 等語言都能讀取它。
  • 「數字加引號也沒關係。」 "35" 是字串,不是數字。混用會造成錯誤,例如 "35" + "5" 會變成 "355"。金額通常更適合以整數的分為單位儲存(3550),以避免捨入問題。
  • 「JSON 只是資料,所以很安全。」 JSON 可以承載任何東西,包括機密。不要把 API 金鑰放進會傳送到瀏覽器的 JSON 中。
  • 「把所有東西都放進 JSON 欄位。」 用來存放彈性的額外資訊很方便,但需要搜尋、篩選或關聯的資料,通常應該放在正式的欄位中。
  • 「AI 一定會回傳有效的 JSON。」 模型可能會加入多餘的文字,或破壞格式。許多供應商提供結構化輸出模式;你的程式仍然應該檢查收到的內容。

可以向 AI 製作工具提出的要求

  • 「給我看這個端點回傳的 JSON 範例。」
  • 「錯誤要以 JSON 回傳,包含 error 代碼與易讀的 message。」
  • 「日期以 UTC 的 ISO 8601 字串儲存,只在畫面上才轉換為當地時間。」
  • 「金額以整數分為單位儲存。」
  • 「在伺服器端驗證收到的 JSON,並拒絕缺少欄位或欄位類型錯誤的請求。」
  • 「呼叫 AI 模型時,要求它以這個確切的格式輸出 JSON,並在使用前先檢查。」

Mythex 中的 JSON

在 Mythex 中你不需要手寫 JSON,只要描述你要的內容,Agent 就會撰寫負責傳送與讀取它的程式碼。不過認識 JSON 仍然有幫助:當某個地方出錯時,把 JSON 錯誤貼到聊天中,能給 Agent 一個精確的線索。文件中的 REST API 後端食譜 一開始就要求提供「清楚的 JSON 錯誤」,而 整合任何 API 食譜則涵蓋呼叫外部服務的做法。若想了解更完整的背景,請參閱 REST 與 GraphQL,以及 如何除錯 AI 製作的 App。

常見問題

用簡單的話來說,什麼是 JSON?

JSON(JavaScript Object Notation)是一種純文字格式,用來以「名稱與值」的方式寫下結構化資料,例如 "name": "Lena"。幾乎所有網路 API 都用它來來回傳送資料,許多 App 也用它來儲存設定與資料。

JSON 是一種程式語言嗎?

不是。JSON 是一種資料格式,不是語言。它本身無法執行任何動作,只用來描述資料。雖然它源自 JavaScript,但幾乎所有程式語言都能讀寫它。

JSON 和 JavaScript 物件有什麼差別?

兩者外觀相似,但 JSON 的規則更嚴格。在 JSON 中,每個鍵都必須使用雙引號,字串也使用雙引號,不能有註解與結尾逗號,而且值只能是字串、數字、true、false、null、物件與陣列。

為什麼我的 JSON 顯示無效?

常見原因包括:最後一個項目後面有結尾逗號、使用單引號而非雙引號、項目之間缺少逗號、括號沒有關閉,或是加入了註解。把內容貼到 JSON 驗證工具中,它會指出出錯的那一行。

Mythex · Pricing · 用 AI 打造任何東西 · 網站與應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費的 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港)