Contents
Data terstruktur disajikan dalam format standar yang disebut JSON (JavaScript Object Notation). Meskipun JSON berevolusi dari bahasa pemrograman JavaScript, sekarang menjadi cara yang umum bagi sistem untuk bertukar data. Sebagian besar API kontemporer menerima kueri JSON dan menghasilkan balasan JSON, oleh karena itu memiliki pemahaman yang kuat tentang karakteristik format sangat membantu.
Artikel ini akan mendefinisikan JSON, menjelaskan bagaimana JSON mengekspresikan berbagai jenis data, dan menjelaskan bagaimana Anda dapat membuat dan menggunakannya dalam bahasa pemrograman yang terkenal. Kami juga akan membahas beberapa kelemahan JSON dan pengganti yang tersedia.
Dasar JSON
Douglas Crockford awalnya membuat JSON sebagai format tanpa kewarganegaraan untuk mentransfer data antara browser dan server. Setelah halaman awal dimuat, situs web mulai mengambil data tambahan secara asinkron dari server mereka di awal tahun 2000-an. JSON, format berbasis teks yang diturunkan dari JavaScript, mempermudah aplikasi ini untuk mengumpulkan dan menggunakan data. Pada 2013, spesifikasi akhirnya dikodifikasikan sebagai ECMA-404.
JSON dikomunikasikan secara eksklusif sebagai string. Banyak tipe data fundamental, seperti angka, boolean, array, dan objek, dapat diturunkan dari string ini. Hirarki dan hubungan antara objek dengan demikian dapat dipertahankan selama transmisi dan kemudian dipasang kembali dengan cara yang sesuai untuk lingkungan pemrograman di sisi penerima.
Contoh JSON Dasar
Ini adalah representasi JSON dari posting blog:
{ "id": 1001, "title": "What is JSON?", "author": { "id": 1, "name": "James Walker" }, "tags": ["api", "json", "programming"], "published": false, "publishedTimestamp": null }
Semua tipe data JSON ditampilkan dalam contoh ini. Ini juga menunjukkan bagaimana data berformat JSON ringkas, yang merupakan salah satu kualitas yang membuatnya begitu menggoda untuk digunakan dalam API. Berbeda dengan bentuk yang lebih bertele-tele seperti XML, JSON juga cukup sederhana untuk dipahami dalam bentuk mentahnya.
Tipe Data JSON
JSON secara native dapat mewakili enam jenis data berikut:
- String - String ditulis dalam tanda kutip ganda, dan garis miring terbalik dapat digunakan untuk keluar dari karakter.
- Angka dinyatakan sebagai angka dan tidak diapit tanda kutip. Untuk menunjukkan pelampung, Anda dapat menyertakan komponen fraksional. Ketika tidak ada titik desimal, sebagian besar implementasi penguraian JSON mengambil nilai menjadi bilangan bulat.
- Nilai literal true dan false didukung untuk boolean.
- Null - Nilai yang kosong atau hilang dapat diwakili oleh nilai literal null.
- Daftar sederhana disebut array dan diidentifikasi dengan tanda kurung siku. Elemen daftar dipisahkan satu sama lain dengan koma. Sejumlah elemen dapat dimasukkan dalam array, dan tipe data apa pun yang tersedia dapat digunakan.
- Kurung keriting digunakan untuk membangun objek. Mereka terdiri dari sejumlah pasangan kunci-nilai dengan kunci berupa string yang diapit tanda kutip ganda. Setiap tipe data yang dapat diakses dapat digunakan sebagai nilai dari setiap kunci. Objek dapat disarangkan untuk membangun hierarki kaskade. Setiap nilai harus diikuti dengan koma untuk menunjukkan akhir dari key-value pair tersebut.
Tipe data ini secara otomatis diubah menjadi struktur bahasa yang tepat oleh parser JSON. Misalnya, Anda tidak perlu secara manual mentransmisikan id ke bilangan bulat. Ini cukup untuk menguraikan teks JSON lengkap untuk mengonversi nilai kembali ke format data aslinya.
Semantik dan Validasi
Saat menyandikan data, Anda harus mematuhi persyaratan JSON tertentu. Konsumen tidak akan dapat mengurai string yang mengikuti tata bahasa.
Anda harus memperhatikan tanda kutip yang mengelilingi string dan kunci objek. Tanda koma juga harus disertakan setelah setiap entri dalam objek atau larik. Namun, JSON tidak mengizinkan tanda koma setelah entri terakhir—secara tidak sengaja menambahkan satu koma sering menjadi penyebab masalah validasi. Sebagian besar editor teks akan membantu Anda mengidentifikasi kesalahan dengan menyoroti masalah sintaksis.
Terlepas dari masalah yang sering terjadi ini, JSON adalah salah satu format data paling sederhana untuk dibuat secara manual. Begitu mereka terbiasa dengannya, kebanyakan orang menganggap sintaksisnya cepat dan berguna. Secara umum, JSON kurang rentan terhadap kesalahan dibandingkan XML, yang sering mengalami masalah karena ketidaksesuaian tag awal dan akhir, deklarasi skema yang salah, dan masalah pengkodean karakter.
Menunjuk Konten JSON
Saat menyimpan JSON ke file, ekstensi .json biasanya digunakan. Application/json adalah tipe MIME yang direkomendasikan untuk konten JSON, namun text/json terkadang digunakan untuk kompatibilitas. Application/json harus digunakan hari ini untuk header HTTP untuk Accept dan Content-Type.
Sebagian besar API berbasis JSON akan memiliki semua informasi di objek tingkat atas:
{ "error": 1000 }
Namun, hal ini tidak diperlukan karena tipe literal dapat diterima sebagai node tingkat atas dalam sebuah file, membuat semua instance berikut ini juga dapat diterima sebagai JSON:
1000 true null
Dalam bahasa pemrograman Anda, mereka akan menerjemahkan ke skalar yang sesuai.
Bekerja Dengan JSON
Sebagian besar bahasa komputer sekarang mendukung JSON. Berikut beberapa konteks umum dan cara berinteraksi dengan data JSON di dalamnya.
JavaScript
Untuk menyandikan dan mendekode string JSON dengan JavaScript, gunakan metode JSON.stringify() dan JSON.parse() :
const post = { id: 1001, title: "What Is JSON?", author: { id: 1, name: "James Walker" } }; const encodedJson = JSON.stringify(post); // {"id": 1001, "title": "What Is JSON?", ...} console.log(encodedJson); const decodedJson = JSON.parse(encodedJson); // James Walker console.log(decodedJson.author.name);
PHP
Fungsi yang setara dalam PHP adalah json_encode() dan json_decode():
$post = [ "id" => 1001, "title" => "What Is JSON?", "author" => [ "id" => 1, "name" => "James Walker" ] ]; $encodedJson = json_encode($post); // {"id": 1001, "title": "What Is JSON?", ...} echo $encodedJson; $decodedJson = json_decode($encodedJson, true); // James Walker echo $decodedJson["author"]["name"];
Python
Python menyediakan json.dumps() dan json.loads() untuk serialisasi dan deserialisasi masing-masing:
import json post = { "id": 1001, "title": "What Is JSON?", "author": { "id": 1, "name": "James Walker" } } encodedJson = json.dumps(post) # {"id": 1001, "title": "What Is JSON?", ...} print(encodedJson) decodedJson = json.loads(encodedJson) # James Walker print(decodedJson["author"]["name"])
Ruby
Ruby menawarkan JSON.generate dan JSON.parse:
require "json" post = { "id" => 1001, "title" => "What Is JSON?", "author" => { "id" => 1, "name" => "James Walker" } } encodedJson = JSON.generate(post) # {"id": 1001, "title": "What Is JSON?", ...} puts encodedJson decodedJson = JSON.parse(encodedJson) # James Walker puts decodedJson["author"]["name"]
JSON Limitations
JSON adalah format ringkas yang menekankan komunikasi nilai-nilai yang disertakan dalam struktur data Anda. Ini membuatnya mudah untuk dikerjakan dan cepat diurai, tetapi ada kelemahan yang bisa membuat frustasi. Berikut adalah beberapa masalah yang paling mendesak.
Tidak ada komentar
Komentar tidak diperbolehkan dalam data JSON. Kurangnya anotasi membuat segalanya menjadi kurang jelas dan memaksa Anda untuk menyimpan informasi di tempat lain. Oleh karena itu, JSON mungkin tidak sesuai untuk pengaturan seperti file konfigurasi, di mana perubahan cenderung jarang terjadi dan tujuan bidang mungkin tidak jelas.
Tidak ada Skema
Anda tidak dapat menentukan skema untuk data Anda di JSON. Misalnya, tidak ada mekanisme untuk menjamin bahwa kolom numerik "id" adalah yang diperlukan. Struktur data cacat yang tidak disengaja dapat terjadi akibat hal ini.
Tidak Ada Referensi
Bidang dalam struktur data tidak dapat membuat referensi ke nilai lain. Pengulangan dari ini sering meningkatkan ukuran file. Untuk menggunakan contoh posting blog sebelumnya sebagai contoh, Anda dapat memiliki daftar artikel blog yang terlihat seperti ini:
{ "posts": [ { "id": 1001, "title": "What is JSON?", "author": { "id": 1, "name": "James Walker" } }, { "id": 1002, "title": "What is SaaS?", "author": { "id": 1, "name": "James Walker" } } ] }
Meski materi yang terkait dengan objek itu harus direplikasi, kedua entri tersebut ditulis oleh penulis yang sama. Di dunia yang sempurna, implementasi parser JSON akan dapat menghasilkan struktur yang ditampilkan di atas dari data yang terlihat seperti ini:
{ "posts": [ { "id": 1001, "title": "What is JSON?", "author": "{{ .authors.james }}" }, { "id": 1002, "title": "What is SaaS?", "author": "{{ .authors.james }}" } ], "authors": { "james": { "id": 1, "name": "James Walker" } } }
Standar JSON saat ini tidak memungkinkan untuk ini.
Tidak Ada Tipe Data Tingkat Lanjut
Keenam tipe data yang tersedia kehilangan banyak jenis nilai yang populer. Anda harus memilih format Anda sendiri untuk data ini karena tanggal, waktu, dan titik geografis tidak didukung secara native oleh JSON.
Kasus tepi dan perbedaan yang mengganggu dihasilkan dari ini. Anda harus melacak kapan menggunakan setiap format jika program Anda menangani stempel waktu sebagai string, seperti 2022-07-01T12:00:00+00:00, tetapi API eksternal menampilkan waktu sebagai detik setelah zaman Unix ( 1657287000).
Alternatif JSON
Pengganti JSON yang paling banyak digunakan adalah YAML. Ini adalah superset format dengan referensi yang didukung, presentasi yang lebih mudah dipahami, dan tipe data kustom. Ini bertujuan untuk mengatasi sebagian besar masalah kegunaan dengan JSON.
Penggunaan YAML secara luas dalam file konfigurasi, serta di DevOps, IaC, dan alat observasi Ini tidak biasa digunakan sebagai format pertukaran data API. Karena kerumitannya yang relatif, YAML kurang ramah pengguna untuk pemula. Kesalahan sintaks kecil dapat menyebabkan masalah penguraian yang membingungkan.
Pesaing JSON lain yang sedang berkembang, buffer protokol (protobuf), dibuat untuk membuat serialisasi data terstruktur. Deklarasi tipe data, bidang wajib, dan kompatibilitas untuk sebagian besar bahasa pemrograman populer adalah semua fitur protobuf. Teknik ini menjadi lebih disukai sebagai metode transmisi data yang lebih efektif melalui jaringan.
Ringkasan
JSON adalah format berbasis teks untuk representasi data yang dapat menyimpan enam kategori utama data. Semua bahasa pemrograman utama sekarang mendukung JSON, yang telah memantapkan dirinya sebagai standar de facto untuk sebagian besar REST API yang dibuat selama dua dekade sebelumnya.
Kesederhanaan JSON berkontribusi pada daya tariknya, tetapi juga membatasi apa yang dapat Anda lakukan dengan format tersebut. Beberapa aplikasi mungkin menemukan bahwa mereka melebihi kemampuan JSON karena tidak adanya dukungan untuk skema, komentar, referensi objek, dan tipe data khusus. Masalah ini telah diatasi oleh alternatif yang lebih baru seperti YAML dan Protobuf, tetapi XML masih merupakan pesaing untuk aplikasi yang perlu mendeskripsikan skema data dan tidak mempermasalahkan verbositasnya.
0 Komentar