Data JSON (.json)

RFC Standar

JavaScript Object Notation (JSON) adalah format teks yang ringan dan mudah dibaca manusia untuk pertukaran data, sepenuhnya independen dari bahasa pemrograman, dan digunakan secara universal untuk API web.

Konversi JSON ke HTML

Konverter JSON ke HTML gratis yang berjalan di peramban. Konversikan berkas secara instan di perangkat Anda.

Kompres JSON Secara Daring

Privat - file tidak pernah meninggalkan perangkat Anda

Pemeriksaan & Metadata

Sistem operasi dan penganalisis file mengenali file JSON dengan memeriksa urutan byte biner di bagian awal:

Pilih atau letakkan berkas di sini

Privat - file tidak pernah meninggalkan perangkat Anda

atau tempel Ctrl+V
Jaminan Privasi Tanpa Transmisi Jaringan: 0 byte diunggah ke server eksternal. Semua pemrosesan berlangsung secara lokal di sandbox browser Anda.

Tanda Tangan Header per Byte (Byte Penanda)

Sistem operasi dan penganalisis file mengenali file JSON dengan memeriksa urutan byte biner di bagian awal:

TANDA TANGAN HEX (OFFSET 0):

7B or 5B

REPRESENTASI ASCII: { or [

Standardisasi: RFC 8259 / ECMA-404 / ISO/IEC 21778

Spesifikasi Teknis

Arsitektur KontainerFormat pertukaran data yang ringan, berbasis teks, dan independen dari bahasa pemrograman
KompresiKompresi teks Gzip / Brotli / Zstandard (biasanya mencapai rasio 80%-90%)
Urutan ByteUnicode yang dikodekan dalam UTF-8 (disarankan tanpa Byte Order Mark / BOM)
Ruang WarnaTidak berlaku
Saluran & StrukturEnam tipe data dasar: objek, susunan (array), string, angka (number), boolean, null
Dimensi MaksimumTanpa batas; hanya dibatasi oleh memori parser dan panjang string maksimum
TransparansiTidak berlaku
Streaming & ProgresifNDJSON (Newline Delimited JSON) / JSON Lines memungkinkan pemrosesan aliran progresif

Perbandingan Teknis JSON dengan Pesaing

Atribut TeknisJSON (Saat Ini)YAMLXMLProtocol Buffers
Kompleksitas SintaksisMinimal (6 tipe, sintaksis ketat)Tinggi (berbasis indentasi, spesifikasi kompleks)Tinggi (tag penutup yang bertele-tele, namespace)Format serialisasi biner yang ditentukan oleh skema
Performa PenguraianSangat cepat di semua bahasa modernLambat (penguraian indentasi yang kompleks)Sedang hingga lambat (konstruksi DOM yang berat)Sangat cepat (deserialisasi biner tanpa penyalinan / zero-copy)
Dukungan KomentarTidak ada (sengaja dikecualikan untuk mencegah penumpukan metadata)Ya (komentar #)Ya (komentar <!-- -->)Ya di dalam file .proto
Ukuran Payload JaringanTeks ringkas (rasio gzip sangat tinggi)Teks ringkasTeks panjang lebar (pengulangan tag yang berlebihan)Biner sangat ringkas

Pola Kerusakan Umum dan Panduan Pemulihan Hex

SyntaxError: token , tidak terduga pada posisi X dalam JSON.

Penyebab Utama: Koma tambahan (trailing comma) setelah item terakhir dalam susunan atau objek, yang secara ketat dilarang dalam JSON RFC 8259.

Pemulihan: Hapus koma tambahan dari kunci objek dan entri susunan sebelum diteruskan ke JSON.parse().

SyntaxError: token ' tidak terduga dalam JSON.

Penyebab Utama: String atau kunci diapit dalam tanda kutip tunggal ('') alih-alih tanda kutip ganda ("").

Pemulihan: Ganti semua string dan kunci bertanda kutip tunggal dengan string bertanda kutip ganda standar.

Analisis Keamanan & Vektor Serangan Parser

JSON hanya berupa teks dan aman dari eksekusi kode langsung, tetapi penguraian JSON yang tidak tepercaya dapat menyebabkan pencemaran prototipe (Prototype Pollution), ReDoS, atau kehabisan memori.

Vektor Serangan yang Diketahui

  • Pencemaran prototipe (Prototype Pollution): kunci bernama '__proto__' atau 'constructor' mengubah Object.prototype dalam aplikasi JavaScript.
  • Penolakan layanan (DoS) luapan tumpukan (stack overflow) melalui struktur JSON yang bersarang sangat dalam (misalnya 10.000 tanda kurung buka).
  • Kehilangan presisi numerik: Angka JavaScript yang lebih besar dari 2^53 - 1 (9.007.199.254.740.991) secara senyap kehilangan presisinya.

Praktik Terbaik Defensif: Jangan pernah mengevaluasi JSON dengan eval(). Gunakan JSON.parse() dan sanitasi properti '__proto__' dalam fungsi penggabungan objek rekursif.

Asal-Usul & Tonggak Sejarah

2017RFC 8259 menstandarisasi UTF-8 sebagai satu-satunya pengkodean karakter wajib untuk JSON.
2013ECMA-404 mendefinisikan sintaks JSON yang digunakan oleh banyak bahasa pemrograman dan platform.
2001Douglas Crockford merancang JSON untuk memungkinkan komunikasi data tanpa status antara peramban dan server.

Keunggulan & Kelebihan Utama

  • Struktur teks yang mudah dibaca manusia, mendeskripsikan diri sendiri (self-describing), dan ringkas.
  • Dukungan penguraian (parsing) bawaan yang tertanam dalam mesin JavaScript (JSON.parse) dan setiap bahasa pemrograman utama.
  • Spesifikasi yang ketat mencegah eksekusi kode arbitrer.

Keterbatasan Teknis & Kekurangan

  • Tidak ada dukungan untuk komentar, koma di akhir (trailing comma), atau referensi objek melingkar (circular reference).
  • Tidak ada tipe biner asli (data biner harus dikodekan dengan base64, yang memperbesar ukuran hingga 33%).
  • Serialisasi yang kurang efisien dibandingkan format biner seperti Protocol Buffers atau MessagePack.

Fakta Teknis Menarik

  • Douglas Crockford menambahkan klausul lisensi perangkat lunak 'Perangkat Lunak ini harus digunakan untuk Kebaikan, bukan Keburukan' pada alat JSMin JSON asli.
  • JSON adalah subset ketat dari sintaksis JavaScript, tetapi hingga ES2019, karakter U+2028 dan U+2029 mentah yang tidak di-escape valid dalam JSON tetapi tidak valid dalam string JavaScript.
  • Douglas Crockford menemukan bahwa browser web awal dapat mengevaluasi JSON secara langsung menjadi objek menggunakan eval() bawaan JavaScript sebelum API JSON.parse() khusus distandarisasi dalam ECMAScript 5.

Pertanyaan Teknis yang Sering Diajukan

Mengapa JSON tidak mengizinkan komentar?

Tata bahasa JSON tidak mengizinkan komentar. Implementasi dapat berbeda dalam menangani ekstensi dan data khusus aplikasi, sehingga format saja tidak menjamin interoperabilitas.

Bagaimana cara menyimpan integer 64-bit dalam JSON tanpa kehilangan presisi?

Tipe Number bawaan JavaScript adalah float presisi ganda IEEE 754, yang hanya mendukung integer hingga 2^53 - 1 secara presisi. Integer 64-bit (seperti ID database atau stempel waktu) harus diserialisasikan sebagai string (misalnya '1234567890123456789') dalam JSON.

Apa perbedaan antara JSON dan NDJSON / JSON Lines?

JSON standar membungkus seluruh payload dalam satu objek atau susunan root, yang mengharuskan parser memuat seluruh teks sebelum mengevaluasinya. NDJSON (Newline Delimited JSON) memisahkan catatan JSON valid individual dengan karakter baris baru (\n), memungkinkan streaming baris-demi-baris yang efisien memori dari dataset multi-gigabyte yang masif.