JSON構文の空白は4種類です

RFC 8259ではU+0020、タブU+0009、改行U+000A、復帰U+000Dが構文の空白です。NBSPのU+00A0は含みません。MoyoutilのformatJSONはコロン後の通常空白を受け入れ、NBSPは拒否します。コードの\uは実行時に文字を作るJavaScript文字列エスケープです。

formatJSON('{"n":\u00201}'); // accepted
formatJSON('{"n":\u00A01}'); // throws
文字列外のU+0020はJSON検証に通り、U+00A0は失敗する比較
自作比較図です。緑は通過、赤は拒否を表し、コードは検査入力と一致します。実際のUI画面ではありません。

RFC 8259 §2: JSON Grammar

文字列内のNBSPはデータです

二重引用符の内側ではこの例のNBSPは有効です。Moyoutilの整形と圧縮は保存します。原文全体で通常空白に置換するとAとBの間のコードポイントが160から32に変わります。構文修正でデータ内の空白まで無条件に変更しないでください。

const source = '{"text":"A\u00A0B"}';
JSON.parse(formatJSON(source, 0).output).text.codePointAt(1) // 160
JSON.parse(source.replaceAll("\u00A0", " ")).text.codePointAt(1) // 32

RFC 8259 §7: Strings

エラーの行・列と問題位置への移動で周辺を確認します。原文を保存し、文字列外の不正空白を意図した構文空白に入力し直して検証します。NBSP専用検出や自動修正機能はありません。構文通過はAPIスキーマ検証の通過ではありません。

よくある質問

圧縮で不正空白も修正されますか。

いいえ。出力前に構文を検査するため文字列外NBSPは圧縮も拒否します。文字列内NBSPは整形・圧縮後も残ります。