JSON 按 Key 排序

本地處理
app.sort.view

也可透過 #data={"name":"Ada"}#url=... 灌入資料,讀完即從位址列清除。

使用說明

按欄位名對物件的 Key 排序,讓兩次匯出的 JSON 更容易對比。很多序列化實現不保證 Key 順序,排序後再 Diff 會乾淨很多。也可以把排序結果提交進 Git,減少無意義的鍵順序抖動。

遞迴排序

巢狀物件裡的鍵也會按名字排。深層配置一次處理完,不必分層手工整理。

排序規則按鍵名字典序,便於跨語言、跨工具得到穩定輸出。

陣列元素不重排

列表順序通常有業務含義,預設保持原順序。時間線、步驟、排行榜這類陣列不會被按值排序。

只想規範化物件鍵、不想動列表時,用本頁比在格式化裡順手勾選更明確。

和 Diff 一起用

先排序再對比,可減少「其實只是鍵順序不同」的噪音。兩邊都排序後再貼進 Diff 頁。

格式化頁也有「排序 Key」選項,效果類似,本頁專注這一件事。

示例

排序前
{
  "z": 1,
  "a": { "n": 2, "m": 1 },
  "m": 3
}
排序後
{
  "a": {
    "m": 1,
    "n": 2
  },
  "m": 3,
  "z": 1
}
字串會按字典序排嗎?

物件的鍵按名字排序;字串值不會被排序。

穩定嗎?

同一份輸入多次排序應得到相同鍵順序,便於放進 Git。

會改陣列順序嗎?

不會重排陣列元素。只有物件的鍵會被排序。

中文鍵名怎麼排?

按 JavaScript 預設字串比較。中英文混用時順序可能和拼音習慣不完全一致,團隊內統一即可。

推薦工作流

  1. 把兩份「內容相同但鍵順序亂」的 JSON 分別貼進來排序。
  2. 複製結果,再拿到 Diff 頁對比。
  3. 若要入庫或做快照測試,把排序後的版本當作規範輸出。
  4. 業務陣列有順序含義時,不要改用會打亂列表的其它指令碼。

排序只服務「物件鍵規範化」,不是通用的資料清洗。去空值和脫敏請用清理頁。