來自 API 日誌或設定檔的 JSON 通常是一長行,而無法解析的 JSON 通常會在你看不到的地方出錯。這個工具會為其加上縮排以便閱讀,在需要精簡時進行壓縮,而當它損壞時會告訴你確切的行號與欄號並顯示那一行。
大多數時候,你來這裡不是為了讓 JSON 變得美觀 - 而是因為某個地方拒絕了它卻沒說明原因。剖析器會回報行號、欄號以及它預期的內容,工具會印出那一行以及周圍兩行。設定檔第四百行缺少一個逗號,一旦你知道它在哪裡,三十秒就能修好。
JSON 從未允許過這兩者,但人們實際交給你的檔案 - tsconfig、VS Code 設定、任何手動編輯過的東西 - 裡面到處都是。勾選該選項會在剖析前將它們移除,工具隨後會說明移除了多少註解與多少逗號。這是選擇性的,並會被精確回報,因為一個默默修改你文件的格式化工具,比一個直接拒絕它的工具更糟。
它不會猜測你的意圖。除了上面兩種刪除之外,不會修復任何東西:未封閉的大括號、單引號的鍵或沒有引號的鍵只會被回報,而不會被重寫。排序鍵與重新縮排從不改變陣列的順序,也從不改動字串。下一節列出了輸出仍可能與你貼上的內容不同的少數情況。
你的 JSON 會被剖析後重新寫出,所以有些內容會以正規化的形式傳回。數字會被重新書寫:1.50 變成 1.5,1E3 變成 1000.0,-0 變成 0,位數超過 64 位元浮點數所能容納的小數會被捨入(0.1000000000000000055 變成 0.1)。整數在 4,300 位以內保持精確(更長的會被拒絕)。如果一個物件重複了某個鍵,只保留最後一個值,且沒有任何警告。NaN、Infinity 和 -Infinity 會被接受並原樣輸出,儘管標準 JSON(RFC 8259)不允許它們;超出浮點數範圍的數字,例如 1e400,會輸出為 Infinity。如果這些對你要匯入資料的系統很重要,請在相信「沒有錯誤」的結果之前自行檢查。
它會被傳送到伺服器進行剖析,並在同一回應中直接傳回。不會寫入磁碟、不會被快取、不會被記錄日誌,使用記錄只保留計數 - 大小、巢狀深度、所選模式 - 絕不會保留文件本身。
通常是因為註解、結尾逗號、單引號或未加引號的鍵 - 這些在設定檔中很常見,但都不是合法的 JSON。前兩種情況請勾選「允許註解與結尾逗號」;其餘的確實無效,必須修正。
每次請求最多 2,000,000 個字元;更長的文字會被拒絕,並提供其確切長度。對於這種大小的檔案,jq 這類命令列工具是更好的選擇。
日誌管線與串流載入器會逐行讀取一個 JSON 物件,而不是讀取一個大陣列。選擇它,頂層陣列就會以每行一筆精簡記錄的形式傳回。
不會。物件的鍵順序在 JSON 中沒有意義,而有意義的陣列順序則永遠不會被觸碰。排序的存在是為了讓同一文件的兩個版本可以在沒有雜訊干擾的情況下進行比較。
在 Microsoft 365 版 Excel 中,把它儲存為 .json 檔案,然後選擇 Data > Get Data > From File > From JSON(資料 > 取得資料 > 從檔案 > 從 JSON)。Power Query 會開啟它:最上層陣列顯示為 List,To Table(到表格)把它變成一欄 Records,欄標題上的展開按鈕(兩個箭頭)會把每個鍵拆成獨立的欄;展開巢狀陣列會為每個項目增加一列。Power Query 需要一個有效的 JSON 文件,所以請先在這裡修正錯誤,這裡會標出行號和欄號,然後儲存美化或壓縮的輸出;JSON Lines 輸出是給記錄檔工具用的。本工具本身不會把 JSON 轉成 CSV 或 Excel。
Python 內建驗證工具:python -m json.tool data.json 會以 4 個空格縮排輸出文件,或以 Expecting ',' delimiter: line 3 column 3 這類訊息停止。如果裝了 jq,jq . data.json 會格式化輸出,jq empty data.json 只做驗證,檔案有效時不會輸出任何內容。兩者都不接受註解和尾隨逗號,因此含有這些內容的設定檔會在那裡出錯;把它貼到這裡並勾選「允許註解和尾隨逗號」,就能看到移除了什麼。
解析器在這裡需要一個物件的鍵,卻遇到了別的內容。最常見的原因是鍵用了單引號或沒有引號,例如從 Python 或 JavaScript 複製來的 {'name': 'Asha'},會在第 1 行第 2 欄停止:JSON 要求每個鍵和字串都用雙引號括起來,而本工具從不改寫引號,所以需要自己修改。如果同樣的訊息出現在右大括號處,例如 {"a": 1,},表示有尾隨逗號;勾選「允許註解和尾隨逗號」即可移除。在 True、False 或 None 處出現 Expecting value,表示這是 Python 的值:JSON 中寫作小寫的 true、false 和 null。在 Python 中,json.dumps(data) 會輸出合法的 JSON,print(data) 則不會。錯誤訊息依 Python 解析器的原文以英文顯示,方便直接搜尋這則訊息。
解析器已讀完一個完整的 JSON 值,之後又遇到更多文字。常見原因:每行一個物件的 JSON Lines(NDJSON)日誌,會在第 2 行第 1 欄停止;前後貼上了兩份文件;或最後一個右大括號後面有 // 註解,勾選「允許註解和尾隨逗號」即可移除。本工具一次只檢查一份文件,所以請只貼上一筆記錄,或把各筆記錄以逗號分隔放進 [ ] 中;之後選擇 JSON Lines,就會重新以每行一筆輸出。