DevToolPal
繁

JSON Lines 與 JSON 互轉

把 JSON Lines(JSONL、NDJSON)轉換成 JSON 陣列,或把 JSON 陣列轉回 JSON Lines,出錯時提供行號。

本機處理,不會上傳

選項

方向
縮排

輸入

0 字元 · 0 B

輸出

0 字元 · 0 B

這是什麼

JSON Lines(也稱 JSONL 或 NDJSON)每行存放一個 JSON 值。它是日誌、資料匯出、串流 API、BigQuery 與 Elasticsearch 大量匯入,以及機器學習資料集(例如 OpenAI 微調檔案)的常用格式,因為程式可以一次讀取或附加一筆記錄,而不必載入整個檔案。

但許多工具只接受單一 JSON 陣列。這個工具把 JSON Lines 轉成排版好的 JSON 陣列,也能把 JSON 陣列轉回 JSON Lines,每行一筆精簡的記錄。

怎麼用

  1. 選擇 方向:JSON Lines → JSON,或 JSON → JSON Lines。
  2. 貼上資料,或上傳 .jsonl、.ndjson、.json 檔案,也可以按 範例。
  3. 輸出 JSON 時,可選 2 或 4 個空格縮排,或選 壓縮 輸出成一行。
  4. 複製或下載結果,或用 作為輸入 再轉換回去。

如果某一行不是合法的 JSON,錯誤訊息會提供行號與欄號,讓你直接找到出錯的記錄——當日誌檔裡數千筆記錄中有一筆被截斷時特別好用。

範例

下面這三行 JSON Lines:

{"id": 1, "event": "signup"}
{"id": 2, "event": "login"}
{"id": 3, "event": "logout"}

會變成這個 JSON 陣列:

[
  {
    "id": 1,
    "event": "signup"
  },
  {
    "id": 2,
    "event": "login"
  },
  {
    "id": 3,
    "event": "logout"
  }
]

反向轉換時,陣列的每個元素寫成一行、不含空格,檔案以換行結尾。

什麼時候用哪一種

記錄是一筆筆產生或使用時,用 JSON Lines:附加日誌、串流回傳結果、把大型資料集分給多個工作程序,或用 grep、head、wc -l 這類逐行處理的工具。程式需要一次取得整個集合時,用 JSON 陣列,例如設定檔、測試資料或 REST 端點的回應內容。

常見問題

› JSONL、NDJSON 和 JSON Lines 有什麼不同?

它們是同一種格式的不同名稱:每行一個完整的 JSON 值,以換行字元分隔。JSON Lines(.jsonl)與換行分隔 JSON(.ndjson)只差在名稱和副檔名。

› 可以有空行嗎?

讀取時會略過空行和結尾的換行。Windows 換行(CRLF)和 UTF-8 BOM 也能正確處理。

› 我的檔案是排版過的 JSON,一個物件跨好幾行,為什麼會出錯?

JSON Lines 要求每個值都寫在同一行。如果輸入是一般的 JSON 陣列,請把方向切換為 JSON → JSON Lines;如果是一連串排版過的物件,請先把它們放進一個陣列。

› 轉換會改變數字或鍵的順序嗎?

不會。值和鍵的順序都保持不變,只有空白會改變。超出 JavaScript 安全整數範圍(約 9 千兆)的極大整數可能失去精度,所有在瀏覽器中執行的 JSON 工具都一樣。