# 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.

- Tool: [Pemformat & Peminimum JSON](https://toolsg.com/ms/json-formatter)
- Language: ms (available: en, zh, ms, ta)
- Last verified against official sources: 2026-10-19
- Source site: ToolSG — a planning guide, not official or financial advice. Cite the agencies listed under Sources.

## Angka utama sepintas lalu

| Perkara | Nilai | Sumber |
| --- | --- | --- |
| Penghurai | JSON.parse terbina dalam pelayar, sintaks RFC 8259 yang ketat — Tiada komen, tiada koma di hujung, tiada petikan tunggal, tiada NaN. | [IETF — RFC 8259](https://www.rfc-editor.org/rfc/rfc8259.html) |
| 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](https://toolsg.com/ms/json-validator), kecilkan dengan [pemadat JSON](https://toolsg.com/ms/json-minify), teroka data bersarang dengan [pemapar JSON](https://toolsg.com/ms/json-viewer), tukar rekod kepada jadual dengan [JSON ke CSV](https://toolsg.com/ms/json-to-csv), atau bandingkan dua versi dengan [perbandingan teks](https://toolsg.com/ms/text-diff).

## 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](https://www.rfc-editor.org/rfc/rfc8259.html) — Grammar, number interoperability, duplicate names and member order.
- [MDN — JSON.stringify()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) — Indent argument, Infinity and NaN written as null.
- [ECMAScript language specification](https://tc39.es/ecma262/) — Own-property ordering (integer-like keys first) used when objects are re-serialised.
