單元 4 · 字串、數字與跳脫

escape、Unicode、數字精度 — Strings & Numbers

字串跳脫 · Escape Sequences

字串內要用反斜線 \ 跳脫特殊字元。JSON 支援的跳脫有限:

支援的跳脫 · ESCAPES
"\"   # 雙引號
"\\"  # 反斜線
"\n"  # 換行
"\t"  # Tab
"\r"  # 回車
"\b"  # 退格
"\f"  # 換頁
"\uXXXX"  # Unicode,如 \u00e9 = é
JSON · 原始碼
{
  "quote": "他說:\"嗨\"",
  "lines": "第一行\n第二行",
  "unicode": "caf\u00e9"
}
讀出後的值 · VALUE
quote   → 他說:"嗨"
lines   → 第一行
          第二行
unicode → café
常見錯誤:多行文字想直接在字串內換行——不行。 JSON 字串不能含裸換行,必須用 \n

Unicode 與中文

JSON 支援 Unicode,中文可以直接寫(UTF-8),也可以用 \uXXXX 轉義。 兩者讀出的結果相同。

JSON · 原始碼
{
  "直接": "繁體中文",
  "轉義": "\u7e41\u9ad4\u4e2d\u6587"
}

兩者都讀出「繁體中文」。某些工具會把非 ASCII 全部轉成 \u(避免編碼問題),例如 Python 的 ensure_ascii=True

數字格式 · Number Rules

JSON 數字規則比你想的更嚴格:

數字規則 · NUMBER RULES
42           # 整數
-3           # 負數
3.14         # 小數
6.02e23      # 指數(e 或 E)
0.5          # 可(0 不能省)

# 以下都是非法:
.5            → 前導 0 不可省
3.            → 尾端點號不可
01            → 前導零不可
+3            → 正號不可
0xFF          → 十六進位不可
NaN / Infinity → 不可

數字精度陷阱 · Precision

JSON 規格不限定數字大小,但讀取方(多為 double)有精度上限:

精度陷阱 · PRECISION
# 超過 2^53 的整數(約 9e15)可能失真:
{ "id": 9007199254740993 }
# JS 讀出後可能變成 9007199254740992

# 常見解決:大數用字串
{ "id": "9007199254740993" }
實務:金額、ID 這類需要精確的數字,API 常用字串傳送,由後端處理。 看到「明明是數字卻包字串」的 API,往往就是這個原因。

布林與 null 的細節

看完這頁你應該能說出:
  • JSON 支援的跳脫字元,以及字串內不能裸換行。
  • 中文可直接寫,也可用 \uXXXX
  • 數字的嚴格格式(前導零、.5、+3 都非法)。
  • 大整數的精度陷阱與「字串化」解法。
  • 布林與 null 必須小寫。

延伸閱讀