Apa itu JSON dan Bagaimana Cara Menggunakannya?

Diterbitkan: 2022-08-14
Gambar teks "JSON" dihamparkan pada monitor komputer
Maria Vonotna/Shutterstock.com

JSON (JavaScript Object Notation) adalah format standar untuk mewakili data terstruktur. Meskipun JSON tumbuh dari bahasa pemrograman JavaScript, sekarang JSON menjadi metode pertukaran data antar sistem yang ada di mana-mana. Sebagian besar API modern menerima permintaan JSON dan mengeluarkan respons JSON, jadi sangat berguna untuk memiliki pengetahuan yang baik tentang format dan fitur-fiturnya.

Dalam artikel ini, kami akan menjelaskan apa itu JSON, bagaimana JSON mengekspresikan tipe data yang berbeda, dan cara Anda dapat memproduksi dan menggunakannya dalam bahasa pemrograman populer. Kami juga akan membahas beberapa batasan JSON dan alternatif yang muncul.

Dasar-dasar JSON

JSON awalnya dirancang oleh Douglas Crockford sebagai format stateless untuk mengkomunikasikan data antara browser dan server. Kembali di awal 2000-an, situs web mulai mengambil data tambahan secara asinkron dari server mereka, setelah pemuatan halaman awal. Sebagai format berbasis teks yang diturunkan dari JavaScript, JSON mempermudah pengambilan dan penggunaan data dalam aplikasi ini. Spesifikasi akhirnya distandarisasi sebagai ECMA-404 pada tahun 2013.

JSON selalu ditransmisikan sebagai string. String ini dapat didekodekan menjadi berbagai tipe data dasar, termasuk angka, boolean, array, dan objek. Ini berarti hierarki dan hubungan objek dapat dipertahankan selama transmisi, kemudian dipasang kembali di sisi penerima dengan cara yang sesuai untuk lingkungan pemrograman.

Contoh JSON Dasar

Ini adalah representasi JSON dari posting blog:

 {
    "id": 1001,
    "title": "Apa itu JSON?",
    "pengarang": {
        "id": 1,
        "nama": "James Walker"
    },
    "tag": ["api", "json", "pemrograman"],
    "diterbitkan": salah,
    "publishedTimestamp": null
}

Contoh ini menunjukkan semua tipe data JSON. Ini juga menggambarkan penyingkatan data berformat JSON, salah satu karakteristik yang membuatnya sangat menarik untuk digunakan dalam API. Selain itu, JSON relatif mudah dibaca apa adanya, tidak seperti format bertele-tele seperti XML.

Tipe Data JSON

Enam jenis data dapat direpresentasikan secara native di JSON:

  • String – String ditulis di antara tanda kutip ganda; karakter dapat diloloskan menggunakan garis miring terbalik.
  • Angka – Angka ditulis sebagai angka tanpa tanda kutip. Anda dapat memasukkan komponen pecahan untuk menunjukkan float. Sebagian besar implementasi penguraian JSON mengasumsikan bilangan bulat ketika tidak ada titik desimal.
  • Boolean - Nilai literal true dan false didukung.
  • Null – Nilai literal null dapat digunakan untuk menandakan nilai kosong atau dihilangkan.
  • Array – Array adalah daftar sederhana yang dilambangkan dengan tanda kurung siku. Setiap elemen dalam daftar dipisahkan dengan koma. Array dapat berisi sejumlah item dan mereka dapat menggunakan semua tipe data yang didukung.
  • Objek – Objek dibuat dengan tanda kurung kurawal. Mereka adalah kumpulan pasangan nilai kunci di mana kuncinya adalah string, dibungkus dengan tanda kutip ganda. Setiap kunci memiliki nilai yang dapat mengambil salah satu tipe data yang tersedia. Anda dapat membuat sarang objek untuk membuat hierarki berjenjang. Sebuah koma harus mengikuti setiap nilai, menandakan akhir dari pasangan nilai kunci tersebut.

Parser JSON secara otomatis mengubah tipe data ini menjadi struktur yang sesuai dengan bahasa mereka. Anda tidak perlu secara manual memberikan id ke bilangan bulat, misalnya. Parsing seluruh string JSON sudah cukup untuk memetakan nilai kembali ke format data aslinya.

Semantik dan Validasi

JSON memiliki aturan tertentu yang perlu dipatuhi saat Anda menyandikan data Anda. String yang tidak mematuhi sintaks tidak akan dapat diuraikan oleh konsumen.

Sangat penting untuk memperhatikan tanda kutip di sekitar string dan kunci objek. Anda juga harus memastikan tanda koma digunakan setelah setiap entri dalam objek atau larik. JSON tidak mengizinkan tanda koma setelah entri terakhir meskipun - secara tidak sengaja memasukkannya adalah penyebab umum kesalahan validasi. Kebanyakan editor teks akan menyoroti masalah sintaks untuk Anda, membantu mengungkap kesalahan.

Terlepas dari titik perjalanan umum ini, JSON adalah salah satu format data termudah untuk ditulis dengan tangan. Kebanyakan orang menemukan sintaks cepat dan nyaman setelah mereka terbiasa dengannya. Secara keseluruhan JSON cenderung kurang rawan kesalahan daripada XML, di mana tag pembuka dan penutup yang tidak cocok, deklarasi skema yang tidak valid, dan masalah pengkodean karakter sering menyebabkan masalah.

Menentukan Konten JSON

Ekstensi .json biasanya digunakan ketika JSON disimpan ke file. Konten JSON memiliki standar MIME type application/json , meskipun text/json terkadang digunakan untuk alasan kompatibilitas. Saat ini Anda harus mengandalkan application/json untuk header HTTP Accept dan Content-Type .

Sebagian besar API yang menggunakan JSON akan merangkum semuanya dalam objek tingkat atas:

 {
    "kesalahan": 1000
}

Ini tidak diperlukan – tipe literal valid sebagai node tingkat atas dalam sebuah file, jadi contoh berikut juga merupakan JSON yang valid:

 1000 
 BENAR 
 batal

Mereka akan memecahkan kode ke skalar masing-masing dalam bahasa pemrograman Anda.

Bekerja dengan JSON

Sebagian besar bahasa pemrograman memiliki dukungan JSON bawaan. Berikut cara berinteraksi dengan data JSON di beberapa lingkungan populer.

JavaScript

Dalam JavaScript, metode JSON.stringify() dan JSON.parse() digunakan untuk menyandikan dan mendekode string JSON:

 pos konstan = {
    nomor : 1001 ,
    judul : "Apa itu JSON?" ,
    penulis : {
        nomor : 1 ,
        Nama : "James Walker"
    }
} ;

const encodedJson = JSON. stringify ( posting ) ;

// {"id": 1001, "title": "Apa itu JSON?", ...}
menghibur. log ( encodedJson ) ;

const decodeJson = JSON. parse ( encodedJson ) ;

//James Walker
menghibur. log ( decodeJson. penulis . nama ) ;

PHP

Fungsi yang setara dalam PHP adalah json_encode() dan json_decode() :

 $posting = [
    "id" => 1001 ,
    "title" => "Apa itu JSON?" ,
    "penulis" => [
        "id" => 1 ,
        "nama" => "James Walker"
    ]
] ;

$encodedJson = json_encode ( $posting ) ;

// {"id": 1001, "title": "Apa itu JSON?", ...}
echo $encodedJson ;

$decodedJson = json_decode ( $encodedJson , true ) ;

//James Walker
echo $decodedJson [ "penulis" ] [ "nama" ] ;

Python

Python menyediakan json.dumps() dan json.loads() untuk membuat serial dan deserialize masing-masing:

 impor json

pos = {
    "id" : 1001 ,
    "title" : "Apa itu JSON?" ,
    "penulis" : {
        "id" : 1 ,
        "nama" : "James Walker"
    }
}

encodedJson = json. dump ( pos )

# {"id": 1001, "title": "Apa itu JSON?", ...}
cetak ( dikodekanJson )

decodeJson = json. beban ( encodedJson )

#James Walker
print ( decodeJson [ "penulis" ] [ "nama" ] )

Rubi

Ruby menawarkan JSON.generate dan JSON.parse :

 membutuhkan "json"

pos = {
    "id" => 1001 ,
    "title" => "Apa itu JSON?" ,
    "penulis" => {
        "id" => 1 ,
        "nama" => "James Walker"
    }
}

encodedJson = JSON. menghasilkan ( posting )

# {"id": 1001, "title": "Apa itu JSON?", ...}
menempatkan encodedJson

decodeJson = JSON. parse ( encodedJson )

#James Walker
menempatkan decodeJson [ "penulis" ] [ "nama" ]

Batasan JSON

JSON adalah format ringan yang berfokus pada penyampaian nilai dalam struktur data Anda. Ini membuatnya cepat untuk diurai dan mudah dikerjakan tetapi berarti ada kekurangan yang dapat menyebabkan frustrasi. Berikut adalah beberapa masalah terbesar.

Tidak ada komentar

Data JSON tidak boleh menyertakan komentar. Kurangnya anotasi mengurangi kejelasan dan memaksa Anda untuk meletakkan dokumentasi di tempat lain. Ini dapat membuat JSON tidak cocok untuk situasi seperti file konfigurasi, di mana modifikasi jarang terjadi dan tujuan bidang mungkin tidak jelas.

Tidak Ada Skema

JSON tidak mengizinkan Anda menentukan skema untuk data Anda. Tidak ada cara untuk menegakkan bahwa id adalah bidang bilangan bulat yang diperlukan, misalnya. Ini dapat menyebabkan struktur data yang salah bentuk secara tidak sengaja.

Tidak Ada Referensi

Bidang tidak dapat mereferensikan nilai lain dalam struktur data. Ini sering menyebabkan pengulangan yang meningkatkan ukuran file. Kembali ke contoh posting blog dari sebelumnya, Anda dapat memiliki daftar posting blog sebagai berikut:

 {
    "postingan": [
        {
            "id": 1001,
            "title": "Apa itu JSON?",
            "pengarang": {
                "id": 1,
                "nama": "James Walker"
            }
        },
        {
            "id": 1002,
            "title": "Apa itu SaaS?",
            "pengarang": {
                "id": 1,
                "nama": "James Walker"
            }
        }
    ]
}

Kedua posting memiliki penulis yang sama tetapi informasi yang terkait dengan objek tersebut harus diduplikasi. Di dunia yang ideal, implementasi parser JSON akan dapat menghasilkan struktur yang ditunjukkan di atas dari input yang mirip dengan yang berikut:

 {
    "postingan": [
        {
            "id": 1001,
            "title": "Apa itu JSON?",
            "penulis": "{{ .authors.james }}"
        },
        {
            "id": 1002,
            "title": "Apa itu SaaS?",
            "penulis": "{{ .authors.james }}"
        }
    ],
    "penulis": {
        "james": {
            "id": 1,
            "nama": "James Walker"
        }
    }
}

Ini saat ini tidak dimungkinkan dengan JSON standar.

Tidak Ada Tipe Data Lanjutan

Keenam tipe data yang didukung menghilangkan banyak jenis nilai yang umum. JSON tidak dapat menyimpan tanggal, waktu, atau titik geolokasi secara asli, jadi Anda perlu memutuskan format Anda sendiri untuk informasi ini.

Ini menyebabkan perbedaan yang tidak nyaman dan kasus tepi. Jika aplikasi Anda menangani stempel waktu sebagai string, seperti 2022-07-01T12:00:00+00:00 , tetapi API eksternal menyajikan waktu sebagai detik setelah zaman Unix – 1657287000 – Anda harus mengingat kapan harus menggunakan masing-masing format.

Alternatif JSON

YAML adalah alternatif JSON terkemuka. Ini adalah superset dari format yang memiliki presentasi yang lebih dapat dibaca manusia, tipe data khusus, dan dukungan untuk referensi. Ini dimaksudkan untuk mengatasi sebagian besar tantangan kegunaan yang terkait dengan JSON.

YAML telah melihat adopsi yang luas untuk file konfigurasi dan dalam DevOps, IaC, dan alat observabilitas. Ini lebih jarang digunakan sebagai format pertukaran data untuk API. Kompleksitas relatif YAML berarti kurang mudah didekati oleh pendatang baru. Kesalahan sintaks kecil dapat menyebabkan kegagalan penguraian yang membingungkan.

Buffer protokol (protobufs) adalah pesaing JSON lain yang muncul yang dirancang untuk membuat serial data terstruktur. Protobuf memiliki deklarasi tipe data, bidang wajib, dan dukungan untuk sebagian besar bahasa pemrograman utama. Sistem ini mendapatkan popularitas sebagai cara yang lebih efisien untuk mentransmisikan data melalui jaringan.

Ringkasan

JSON adalah format representasi data berbasis teks yang dapat mengkodekan enam tipe data yang berbeda. JSON telah menjadi inti dari ekosistem pengembangan perangkat lunak; itu didukung oleh semua bahasa pemrograman utama dan telah menjadi pilihan default untuk sebagian besar REST API yang dikembangkan selama beberapa dekade terakhir.

Meskipun kesederhanaan JSON adalah bagian dari popularitasnya, itu juga memberlakukan batasan pada apa yang dapat Anda capai dengan formatnya. Kurangnya dukungan untuk skema, komentar, referensi objek, dan tipe data khusus berarti beberapa aplikasi akan menemukan bahwa mereka melampaui apa yang mungkin dilakukan dengan JSON. Alternatif yang lebih muda seperti YAML dan Protobuf telah membantu mengatasi tantangan ini, sementara XML tetap menjadi pesaing untuk aplikasi yang ingin mendefinisikan skema data dan tidak mempermasalahkan verbositas.