JavaScript 物件鍵名指南

在 JavaScript 將 Object Keys 轉為 snake_case

frontend 使用 camelCase、API 預期 snake_case 時,在 serialization 邊界轉換鍵名。

作者 Camel Case Converter 編輯團隊發布於 2026年9月12日最後審閱

JavaScript 實作

function toSnakeKey(key) {
  return key.replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/[-\s]+/g, "_").toLowerCase()
}

function keysToSnake(value) {
  if (Array.isArray(value)) return value.map(keysToSnake)
  if (value === null || typeof value !== "object") return value
  const output = {}
  for (const [key, child] of Object.entries(value)) {
    const nextKey = toSnakeKey(key)
    if (Object.hasOwn(output, nextKey)) throw new Error(`Key collision: ${nextKey}`)
    output[nextKey] = keysToSnake(child)
  }
  return output
}

切分 camelCase/縮寫邊界、正規化分隔符,最後把 key 轉成小寫。

重建新 object 可在賦值前檢查 collision。

正式環境邊界案例

  • HTTPURL、userID、OAuthToken 可能需要明確縮寫規則。
  • _id、$schema 等語意 prefix 可能需要保留。
  • 遞迴前先決定 API contract 需要 deep 還是 top-level-only conversion。
  • 不同 JavaScript key 可能得到相同 snake_case,因此要保留 collision check。

線上測試物件鍵名

貼上 JSON 物件,測試遞迴轉換、只轉最上層、排除鍵名、_/$ 前綴與衝突處理。

拖放 .json 檔案,或從裝置選取

檔案只會在瀏覽器中讀取。最大檔案大小:5 MB。

轉換後 JSON
{
  "user_profile": {
    "first_name": "Ada",
    "created_at": "2026-09-12"
  }
}

解析、檔案讀取、格式化與鍵名轉換都在瀏覽器本機執行。JSON 不會傳送到轉換伺服器。