JSONL 格式化
格式化結果會顯示在這裡。
每一條非空列都應該是一段完整的 JSON 物件。
一個面向日誌、工作階段封存與串流匯出的輕量 JSONL 格式化頁面。左側貼上換行分隔的 JSON 物件,右側立即預覽每條紀錄的格式化結果,並直接看到哪一行壞了。
相關推薦
什麼是 JSONL 格式化?
JSONL(JSON Lines)是一種逐行組織 JSON 紀錄的文字格式。它的核心特點不是「長得像 JSON」,而是「每一條紀錄獨立占一行」。在實際工程裡,這幾乎總是表現為「每一非空白行都是一個完整 JSON 物件」,物件之間以換行字元分隔,而不是再額外包一層 `[{...},{...}]` 的大陣列。
這種組織方式特別適合日誌、事件串流、工作階段封存、批次匯出與串流處理。因為程式不需要先把整個檔案讀進記憶體,只要逐行讀取就能逐條消費紀錄。某一行壞了,也能直接定位到對應行號,而不是在一個超長 JSON 陣列裡盲目數括號、找逗號。
JSONL 格式化和普通 JSON 格式化不是一回事。普通 JSON 格式化器假設輸入是一整份完整 JSON 文件;JSONL 格式化器則必須逐行剖析、逐行驗證、逐行回報錯誤,還要保留換行分隔的紀錄語意。對日誌與匯出檔案來說,這種差異非常關鍵。
這個頁面就是圍繞這種真實語意設計的:左側輸入換行分隔的物件紀錄,右側依紀錄展示格式化結果,同時把壞行、截斷行與非物件行直接指出來。這樣你在排查 `.jsonl` 檔案時看到的是「哪條紀錄有問題」,而不是籠統地得到一個 `SyntaxError`。
適用場景
- 把應用日誌匯出的 JSONL 逐條美化後再逐欄位排查問題,而不是盯著一長串壓成一行的物件發呆
- 檢查工作階段封存檔案(每一行都是一個事件物件),確認每一條事件物件都完整可讀
- 在資料管線、追蹤平台或 Elasticsearch bulk 匯出失敗時,快速定位到底是哪一行 JSON 物件寫壞了
- 偵錯串流輸出介面時,確認伺服器端是否真的依「每行一個物件」持續產出,而不是把半截物件提前刷出
- 把終端機、監控面板或雲端日誌平台複製出來的 NDJSON 貼進來,先整理結構再繼續排查
- 檢查 AI 產生的逐行物件結果是否某一行混入了陣列、字串或不完整 JSON
- 在匯入 ClickHouse、BigQuery、Kafka Connect 等依賴行級紀錄的流程前,先人工複核 JSONL 內容
- 審查稽核日誌、風控事件或追蹤事件串流時,逐條看物件結構是否穩定一致
- 當 JSONL 檔案被截斷或下載不完整時,快速看到最後哪一條物件沒有閉合
- 把內部工具匯出的 line-delimited JSON 先格式化,再傳給同事做程式碼審查或資料核對
- 在寫腳本剖析 JSONL 之前,先人工確認欄位層級、巢狀物件與陣列位置,減少腳本偵錯時間
- 處理混雜空白行與壞行的歷史匯出檔案時,先過濾結構問題再決定是否繼續轉換成 CSV 或資料庫匯入
使用方法
- 把 JSONL 或 NDJSON 內容貼到輸入區,保證每一條非空白行都是一個獨立 JSON 物件
- 右側會立即逐行格式化,並在壞行處提示具體行號、錯誤訊息與原始紀錄
- 依提示修復對應行,直到不合法行數量歸零
- 確認全部合法後,再複製完整的格式化結果,或繼續把資料送去下游腳本、匯入器與分析流程
功能特點
- 逐行剖析 JSONL / NDJSON,不需要先手動包成 `[{...},{...}]` 這種完整 JSON 陣列
- 依「每一非空白行都是一個 JSON 物件」的真實檔案語意驗證,貼合日誌、事件串流、工作階段封存等常見資料形態
- 左右分欄版面:左側 `textarea` 輸入,右側即時展示格式化結果,適合邊修邊看
- 壞行會直接標出具體行號、剖析錯誤與原始內容,方便快速修復截斷紀錄、缺少括號與拼接錯誤
- 只在全部非空白行都合法時開放複製,避免把部分成功、部分損壞的資料繼續傳給下游流程
- 內建總行數、非空白行、合法行、不合法行統計,適合快速判斷大檔案到底壞了幾條紀錄
- 提供範例資料,首次開啟就能直接試用 JSONL 格式化效果
- 全部處理都在瀏覽器本機完成,日誌、工作階段事件與介面匯出內容不會上傳
JSONL 格式化 vs JSON 格式化 vs JSON 修復
這幾個工具經常連著用,但解決的問題並不一樣。選對入口會快很多。
| 工具 | 最適合的輸入 | 核心能力 | 適用場景 |
|---|---|---|---|
| JSONL 格式化 | 每行一個 JSON 物件 | 依紀錄逐行驗證與美化 | 日誌、NDJSON、工作階段封存、串流匯出 |
| JSON 格式化 | 一個完整 JSON 物件或陣列 | 美化整份 JSON 文件 | API 回應、設定檔、單次 payload |
| JSON 修復 | 有語法錯誤或不標準的 JSON 文字 | 先修語法再交給後續工具 | 尾逗號、註解、引號問題、截斷 JSON |
最佳实践
偵錯時盡量保持原始 JSONL 形態,不要為了看懂先手動包成陣列
如果下游系統原本吃的是 JSONL,就盡量在原始「每行一條紀錄」的形態下排查。先包成陣列雖然能丟給普通 JSON 格式化器,但會丟失原始行號語意,也更難對應真實壞行位置。
大檔案優先看最後幾行
很多 JSONL 檔案不是中間結構錯,而是最後幾行因為串流中斷、下載失敗或寫入未完成而被截斷。先看尾部幾條紀錄,通常比從頭翻完整檔案更快。
如果輸入本身帶單引號、註解或 JSON5 風格,先走 JSON 修復更省時間
JSONL 格式化頁強調的是逐行物件驗證;如果來源資料先天就不是標準 JSON,先修再格式化通常比在長檔案裡人工逐行改更有效率。
準備重新匯入時,務必保留一行一個物件的傳輸語意
右側的多行美化區塊更適合人看,但如果你接下來要把資料重新寫回日誌系統、訊息佇列或匯入器,記得保留來源資料的一行一物件結構,而不是把預覽形態直接當最終傳輸格式。
把行號當做主線索,而不是全檔案肉眼通讀
真正排查時,最快的方法通常是先鎖定壞行號,再把這一條和前後相鄰合法紀錄對比。這樣能更快看出是缺括號、缺引號、欄位被截斷,還是某個物件混進了錯誤型別。
常見問題
JSON 和 JSONL 有什麼差別?
普通 JSON 通常是一整個物件或陣列,要做為一份完整文件整體剖析;JSONL(JSON Lines,也常叫 NDJSON)則是一行一條獨立紀錄,工程實務裡最常見的是「一行一個 JSON 物件」。它更適合日誌、事件串流、串流處理與批次匯入,因為可以逐行讀取、逐行寫入、逐行定位錯誤。
這個頁面為什麼強調「每行一個 JSON 物件」?
因為真實世界裡大多數 JSONL 檔案就是這麼組織的,尤其是日誌、工作階段封存、事件串流與匯出檔案。典型的封存樣本也是如此:每一行都是一個物件,以換行字元分隔。頁面依這個語意驗證,比寬鬆接受任意 JSON 值更符合實際偵錯場景。
JSONL 和 `[{...},{...}]` 這種 JSON 陣列有什麼不同?
JSON 陣列是一份完整 JSON 文件,必須整體讀完再剖析;JSONL 則把每條物件拆成獨立的行紀錄,可以串流讀取,也更容易在某一條出錯時直接定位到對應行。對於大日誌檔案與事件串流來說,JSONL 比整包陣列更適合處理。
空白行為什麼會被忽略?
空白行通常來自複製貼上、日誌輪轉或人工編輯,不代表真正的資料紀錄。忽略空白行可以減少雜訊,同時仍然嚴格檢查所有包含內容的資料行。
如果某一行是陣列、字串或 `null` 會怎樣?
這個頁面會把它判定為不合法行,因為這裡的目標格式是「每一非空白行都是一個 JSON 物件」。如果你的資料確實需要逐行儲存陣列或原始值,那代表它不是這個頁面目前最佳化的典型 JSONL 日誌場景。
為什麼有一條壞行時不能直接複製全部結果?
這是刻意保持保守的互動。只有當全部非空白行都合法時才允許複製,避免把部分成功、部分損壞的結果繼續傳給下游匯入器、腳本或同事,省掉二次排查成本。
它能幫我發現被截斷的日誌檔案嗎?
可以。很多 JSONL 問題都發生在最後幾行,比如物件少了 `}`、字串少了結束引號、網路串流中途斷掉。頁面會把對應壞行直接暴露出來,尤其適合排查下載不完整與串流輸出中斷。
JSONL 和 NDJSON 是一回事嗎?
在絕大多數工程語境裡可以當成同義詞。兩者都表示以換行分隔的 JSON 紀錄,只是命名習慣不同。
格式化 JSONL 時會上傳我的資料嗎?
不會。所有剖析、驗證與格式化都只在瀏覽器本機執行,日誌、介面回傳、工作階段封存與資料匯出內容都不會傳到伺服器。
什麼時候該用普通 JSON 格式化,而不是 JSONL 格式化?
如果你的輸入本身是一個完整 JSON 物件或一個陣列,比如 API 回應內容、設定檔、`[{...},{...}]` 這種資料包,就該用普通 JSON 格式化頁;只有在輸入是依換行拆開的逐條物件紀錄時,才更適合這個 JSONL 格式化頁。
術語表
- JSONL
- 一種逐行分隔 JSON 紀錄的文字格式。最常見的工程寫法是每一條非空白行都是一個完整 JSON 物件。
- JSON Lines
- JSONL 的全稱與另一種常見叫法,通常與 JSONL 視為同義。
- NDJSON
- Newline Delimited JSON,直譯為「換行分隔的 JSON」。在大多數日誌與資料管線場景中與 JSONL 基本等價。
- 逐行紀錄
- 每一行都代表一條完整紀錄的資料布局,適合串流寫入、串流讀取與逐行定位錯誤。
- Pretty Print / 美化格式化
- 把壓縮的一行 JSON 重新排成帶縮排與換行的可讀結構,方便人工查看欄位層級。
- 壞行
- 某一行不是合法 JSON,或雖然能剖析但不符合預期結構(例如不是物件),因此不能做為有效 JSONL 紀錄。
- 截斷串流
- 日誌或匯出在傳輸、重新整理或儲存過程中被中途截斷,導致最後一條紀錄沒有完整閉合。
- JSON 陣列
- 標準 JSON 中用 `[` 和 `]` 包起來的一整個集合,例如 `[{...},{...}]`。它與 JSONL 不同,必須做為一份整體文件來剖析。
Authoritative References
- jsonlines.orgJSON Lines 官方說明
- IETFJSON 官方規範 RFC 8259
- JSON 壓縮
- CSV 轉 JSON
- JSON 轉 CSV
- JSON Diff
- JSON Escape / Unescape
- JSON 扁平化
- JSON 格式化
- JSONL 格式化
- JSON 產生器
- JSONPath 查詢
- JSON 合併
- JSON 修復
- JSON Schema 驗證器
- JSON 排序
- JSON Stringify
- JSON 轉 HTML 表格
- JSON 轉 Java
- JSON 轉 Markdown
- JSON 轉 SQL
- JSON 轉 TOML
- JSON 轉 TypeScript
- XML 轉 JSON
- JSON 轉 XML
- YAML 轉 JSON
- JSON 轉 YAML
- JSON 轉 Go
- JSON 轉 Rust
- JSON 轉 Swift
- JSON轉C#
- JSON 轉 C++
- JSON 轉 PHP
- JSON 轉 Python