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文字列内の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エラーの行・列と問題位置への移動で周辺を確認します。原文を保存し、文字列外の不正空白を意図した構文空白に入力し直して検証します。NBSP専用検出や自動修正機能はありません。構文通過はAPIスキーマ検証の通過ではありません。
よくある質問
圧縮で不正空白も修正されますか。
いいえ。出力前に構文を検査するため文字列外NBSPは圧縮も拒否します。文字列内NBSPは整形・圧縮後も残ります。