Baris pada sumber berbeda dari baris pada nilai

Dalam string sumber JSON, garis miring terbalik diikuti n mengodekan baris baru. Dua garis miring mempertahankan satu garis miring dan n sebagai dua karakter pada nilai hasil parsing. Kedua contoh valid, tetapi panjang nilai text adalah 3 dan 4.

{"text":"A\nB"}
{"text":"A\\nB"}

JSON.parse('{"text":"A\\nB"}').text.length // 3
JSON.parse('{"text":"A\\\\nB"}').text.length // 4
Diagram perbandingan satu karakter LF dengan garis miring terbalik dan n di antara A dan B
Diagram buatan sendiri berdasarkan input yang dijalankan. Angka menunjukkan length JavaScript dari nilai text hasil parsing, bukan ukuran berkas JSON dalam byte.

Baris baru nyata di dalam string adalah kesalahan

RFC 8259 mewajibkan escape untuk karakter kontrol U+0000 sampai U+001F dalam string, termasuk LF literal. LF, CR, tab dan spasi diizinkan di antara token. Dalam pengujian, LF literal di dalam string ditolak, tetapi objek beberapa baris diterima.

const invalid = '{"text":"A' + '\n' + 'B"}';
formatJSON(invalid); // throws

formatJSON('{\n"text":"AB"\n}'); // accepted

RFC 8259 §7: Strings · RFC 8259 §2: JSON Grammar

Pisahkan pemformatan sumber dari penafsiran nilai

Moyoutil mempertahankan token string sumber dan mengubah indentasi di luarnya. Alat ini tidak menampilkan \n sebagai baris baru nyata pada nilai. Minifikasi juga mempertahankan escape string. Jika gagal, periksa tanda kutip dan garis miring dekat posisi yang ditunjukkan. Menambah garis miring ke seluruh input dapat mengubah nilai yang sudah benar.

Jalankan pemformatan dan validasi dengan contoh lalu bandingkan hasil minifikasi. Untuk nilai yang memerlukan baris baru, serialisasikan string dengan JSON.stringify saat membuat JSON, lalu periksa nilai JSON.parse. Lolos sintaks tidak memvalidasi kolom wajib dalam skema API.

Pertanyaan yang Sering Diajukan

Apakah minifikasi menghapus baris baru dalam nilai?

Tidak. Minifikasi mengurangi spasi di luar string. Alat ini mempertahankan escape dalam string, sehingga baris baru dalam nilai hasil parsing tetap ada.