JSON mengizinkan empat karakter spasi sintaks

RFC 8259 mengizinkan U+0020, tab U+0009, baris baru U+000A dan carriage return U+000D. NBSP U+00A0 tidak termasuk. formatJSON menerima spasi biasa setelah titik dua, tetapi menolak NBSP. \u adalah escape string JavaScript yang membuat karakter saat dijalankan.

formatJSON('{"n":\u00201}'); // accepted
formatJSON('{"n":\u00A01}'); // throws
U+0020 di luar string lolos validasi JSON; U+00A0 gagal
Diagram sendiri: hijau diterima, merah ditolak. Kode cocok dengan input yang diuji; bukan tampilan UI sebenarnya.

RFC 8259 §2: JSON Grammar

NBSP di dalam string adalah data

Di antara tanda kutip ganda, NBSP valid pada contoh ini. Format dan minifikasi mempertahankannya. Mengganti seluruh sumber mengubah titik kode antara A dan B dari 160 menjadi 32. Jangan sembarang mengganti spasi data saat memperbaiki sintaks.

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

Periksa baris, kolom dan kontrol menuju kesalahan. Simpan sumber asli, ketik ulang spasi tidak valid di luar string lalu validasi. Tidak ada deteksi NBSP khusus atau perbaikan otomatis. Validasi sintaks tidak memvalidasi skema API.

Pertanyaan yang Sering Diajukan

Apakah minifikasi memperbaiki spasi tidak valid?

Tidak. formatJSON memeriksa sintaks sebelum keluaran, sehingga NBSP di luar string juga ditolak saat minifikasi. Di dalam string, NBSP tetap ada.