Pemformat JSON
Format dan inden JSON dengan 2 ruang, 4 ruang atau tab, kemudian muat turun hasilnya.
Semuanya diproses dalam pelayar anda. Apa yang anda tampal tidak dimuat naik atau disimpan.
Panduan terperinci
Pemformatan JSON: apa sebenarnya yang dilakukan Format, Minify dan Validate
Cara pemformat menghurai dengan JSON.parse pelayar, apa yang berubah selepas pusingan penuh (susunan kunci, nombor besar, kunci berulang) dan cara membaca mesej ralat.
Angka utama sepintas lalu
- Penghurai
- JSON.parse terbina dalam pelayar, sintaks RFC 8259 yang ketat
- Tiada komen, tiada koma di hujung, tiada petikan tunggal, tiada NaN.
- Sumber: IETF — RFC 8259
- Pilihan inden
- 2 ruang, 4 ruang atau satu tab
- Minify tidak menggunakan sebarang ruang kosong.
- Nombor
- Dihurai sebagai ketepatan berganda IEEE 754
- Integer melebihi 9007199254740991 dan perpuluhan yang memerlukan lebih kurang 17 digit bererti boleh berubah.
- Muat turun
- formatted.json
- Fail mengandungi apa sahaja dalam kotak output, sama ada diformat atau dipadatkan.
Cara tiga butang berfungsi
Halaman menghurai teks anda dengan JSON.parse dan, jika berjaya, menulis semula nilai itu dengan JSON.stringify. Tiada apa dihantar ke mana-mana; semuanya berlaku dalam pelayar.
- Format menulis nilai dengan inden pilihan anda: 2 ruang, 4 ruang atau aksara tab.
- Minify menulisnya tanpa ruang kosong antara token.
- Validate hanya menghurai dan melaporkan "JSON Sah" atau ralat; kotak output tidak diubah.
Ruang kosong di awal dan akhir dibuang dahulu. Input kosong memaparkan "Sila masukkan data JSON". Sepanduk status hilang selepas tiga saat, dan mengedit input mengosongkan output supaya hasil lapuk tidak bersebelahan teks baharu.
Oleh sebab output ialah pensirian semula dan bukan suntingan teks, hasilnya ialah "data yang sama ditulis secara kanonik", bukan "teks anda dengan ruang diubah". Ini penting dalam kes di bawah.
Apa yang boleh berubah dalam pusingan penuh
| Anda tampal | Output | Sebab |
|---|---|---|
{"b":1,"2":"x","1":"y"} |
kunci "1", "2", kemudian "b" |
JavaScript menyenaraikan kunci seperti integer dahulu, menaik |
{"a":1,"a":2} |
{"a":2} |
Pendua terakhir menang; RFC 8259 menyatakan kelakuan pendua tidak dapat diramal |
12345678901234567890 |
12345678901234567000 |
Ketepatan berganda menyimpan kira-kira 15–17 digit bererti |
9007199254740993 |
9007199254740992 |
Melebihi 2^53 − 1 tidak setiap integer boleh diwakili |
1.50, 1.0, 5E+2 |
1.5, 1, 500 |
Nombor dicetak semula, bukan dikekalkan sebagai teks |
-0 |
0 |
JSON.stringify menulis sifar negatif sebagai 0 |
1e400 |
null |
Melimpah menjadi Infinity, yang ditulis JSON.stringify sebagai null |
"é" |
"é" |
Escape dinyahkod, kemudian aksara ditulis terus jika sah |
Hasil ini diperoleh dengan menjalankan panggilan JSON.parse/JSON.stringify yang sama seperti halaman. Peraturan selamat: pemformatan tidak menghilangkan apa-apa bagi rentetan, boolean, null, tatasusunan dan nombor biasa; ia tidak lossless untuk ID yang sangat besar, kunci berulang atau kunci berbentuk nombor yang susunannya penting. Jika ID 19 digit mesti kekal, simpan sebagai rentetan dalam sumber.
Format, minify dan saiz
Bagi objek {"name":"Mei","tags":["a","b"],"n":{"x":1,"y":[]},"e":{}} (57 aksara selepas dipadatkan), versi 2 ruang ialah 102 aksara, 4 ruang 130 dan tab 88. Tatasusunan dan objek kosong kekal pada satu baris sebagai [] dan {}. Nilai peringkat atas boleh jadi sebarang nilai JSON: 5, "text", [] semuanya sah di bawah RFC 8259, walaupun penghurai lama hanya menerima objek atau tatasusunan.
Membaca mesej ralat
Apabila mesej enjin mengandungi position N, alat menukarnya kepada "baris L, lajur C" lalu menambah teks asal enjin. Mesej datang daripada pelayar anda, jadi ayatnya berbeza antara Chrome, Firefox dan Safari, dan sesetengahnya tiada kedudukan langsung (contohnya [NaN] hanya melaporkan token N tidak dijangka). Punca biasa:
| Input | Masalah |
|---|---|
{"a":1,} |
Koma di hujung: nama sifat bertanda petikan berganda dijangka |
{'a':1} |
Petikan tunggal bukan JSON |
[1,2 |
Kurungan penutup tiada |
{"a":01} |
Sifar di hadapan tidak dibenarkan |
{"a":"x⏎y"} |
Pemisah baris mentah dalam rentetan; tulis \n |
// note atau /* */ |
Komen bukan sebahagian daripada JSON |
[NaN], Infinity, undefined |
Bukan nilai JSON |
Petua: Betulkan kedudukan pertama yang dilaporkan dan jalankan semula. Satu petikan yang tertinggal sering menghasilkan banyak ralat susulan, tetapi hanya yang pertama benar.
Kesilapan biasa
- Menampal literal objek JavaScript (kunci tanpa petikan, petikan tunggal) dan menjangka ia lulus pengesahan.
- Menganggap pemformat mengekalkan susunan kunci asal: kunci berbentuk nombor beralih ke hadapan.
- Memadatkan dokumen dengan ID berangka sangat besar, kemudian membandingkannya digit demi digit dengan sumber.
- Menganggap muat turun sebagai fail asal; ia ialah output yang disiri semula, sentiasa bernama
formatted.json.
Alat berkaitan
Semak sintaks sahaja dengan pengesah JSON, kecilkan dengan pemadat JSON, teroka data bersarang dengan pemapar JSON, tukar rekod kepada jadual dengan JSON ke CSV, atau bandingkan dua versi dengan perbandingan teks.
Soalan lazim
Bagaimana format JSON dengan 4 ruang atau tab?
Gunakan menu Inden di atas editor untuk memilih 2 ruang, 4 ruang atau tab. Output dikemas kini serta-merta dan Muat turun menyimpannya sebagai formatted.json.
Adakah JSON saya dihantar ke pelayan?
Tidak. Semuanya berlaku dalam pelayar anda. Apa yang anda tampal tidak dimuat naik, dilog atau disimpan — penting apabila dokumen mengandungi kunci, token atau data peribadi.
Mengapa JSON saya dilaporkan tidak sah?
Punca paling biasa ialah koma di hujung, petikan tunggal dan bukan petikan berganda pada kunci dan rentetan, serta pemisah baris yang tidak dilepaskan di dalam rentetan. Mesej ralat memberikan baris dan lajur masalah pertama.
Adakah ia mengubah data saya?
Tidak. Dokumen dihurai dan disiri semula, jadi hanya ruang kosong berubah. Susunan kunci dikekalkan dan nilai tidak disentuh.
Bolehkah ia mengendalikan dokumen besar?
Boleh, dalam had memori pelayar anda. Dokumen beberapa megabait tidak menjadi masalah; fail yang sangat besar mungkin menyebabkan halaman berhenti seketika semasa menghurai.
Sumber rujukan
- IETF — RFC 8259, The JSON Data Interchange Format — Grammar, number interoperability, duplicate names and member order.
- MDN — JSON.stringify() — Indent argument, Infinity and NaN written as null.
- ECMAScript language specification — Own-property ordering (integer-like keys first) used when objects are re-serialised.
Panduan ini menerangkan peraturan yang diterbitkan dalam bahasa mudah. Ia bukan nasihat kewangan, undang-undang atau rasmi — peraturan boleh berubah, jadi sahkan dengan agensi yang dipautkan di atas sebelum membuat keputusan.