JSON (JavaScript Object Notation) adalah format teks yang menghidupi web modern: respons dari web API, berkas konfigurasi proyek, hingga export dari aplikasi analitik semuanya berbentuk JSON. Nilainya bagi kita: JSON menyimpan struktur — pasangan nama-nilai berlapis — yang termaperikan hampir satu-satu ke struct MATLAB. Chapter ini membahas dua arah pertukaran tersebut:

  • jsondecode: mengubah teks JSON menjadi data MATLAB
  • jsonencode: mengubah struct, cell, dan array MATLAB menjadi teks JSON
  • Menyimpan dan membaca berkas .json secara utuh (roundtrip)

JSON dan Padanan Tipe Datanya #

Aturannya: JSON hanya mengenal enam jenis nilai — objek, array, string, angka, boolean, dan null — sementara MATLAB kaya tipe. Mekanismenya: jsondecode menerjemahkan setiap jenis JSON ke satu bentuk MATLAB yang tetap, sehingga kita bisa memprediksi bentuk hasilnya sebelum membaca berkas:

Bentuk JSONContohHasil jsondecode
objek{"nama":"Budi"}struct skalar, field per kunci
array angka[1,2,3]vektor kolom double
array teks["a","b"]cell of char
array objek seragam[{"x":1},{"x":2}]struct array 2×1
string"Budi"char
angka15000double
booleantruelogical
null—NaN (dalam array numerik) atau []

Kunci objek menjadi nama field struct: {"nama":"Budi","umur":30} berubah menjadi S.nama dan S.umur.

jsondecode: Dari JSON ke MATLAB #

Masalah nyatanya: respons API dan berkas konfigurasi tiba sebagai teks yang belum bisa diindeks. Mekanismenya: value = jsondecode(txt) mem-parse teks JSON sekali jalan dan mengembalikan data MATLAB yang langsung bisa diakses dengan dot notation:

matlab
teks = '{"nama_aplikasi":"AnalisisToko","versi":2,"data_langsung":true}';
S = jsondecode(teks);
fprintf('decode: %s versi %d aktif=%d\n', S.nama_aplikasi, S.versi, S.data_langsung);

Output yang Dihasilkan:

text
decode: AnalisisToko versi 2 aktif=1

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (teks JSON sebagai char): argumen jsondecode berupa char array atau string scalar — tanda {} menandai objek, tiap pasangan "kunci":nilai dipisah koma.
  2. Baris 3 (jsondecode(teks)): objek JSON menjadi struct skalar dengan tiga field; angka 2 menjadi double, true menjadi logical.
  3. Baris 4 (fprintf ... %d): S.data_langsung bertipe logical sehingga dicetak sebagai 1 — angka aktif=1 itulah tanda nilainya true.

jsonencode: Dari MATLAB ke JSON #

Arah sebaliknya terjadi saat kita menyerahkan data ke program lain. Mekanismenya: txt = jsonencode(data) membaca bentuk data MATLAB dan menghasilkan satu teks JSON — struct menjadi objek, cell menjadi array, dan struct array menjadi array of objects:

matlab
cfg  = struct('nama_aplikasi', 'AnalisisToko', 'versi', 2, 'data_langsung', true);
teks = jsonencode(cfg);
fprintf('JSON: %s\n', teks);

Output yang Dihasilkan:

text
JSON: {"nama_aplikasi":"AnalisisToko","versi":2,"data_langsung":true}

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (struct(...)): urutan argumen struct('field', nilai, ...) menentukan urutan kunci di keluaran JSON — field nama_aplikasi ditulis lebih dulu karena dideklarasikan lebih dulu.
  2. Baris 2 (jsonencode(cfg)): nilai true (logical) dikodekan kembali sebagai true, angka tanpa tanda kutip, teks berkurung petik ganda — persis konvensi JSON.
  3. Baris 3 (fprintf): hasil jsonencode adalah char, bukan berkas — penulisannya ke disk kita lakukan di bagian berikutnya.

Opsi jsonencode(data, PrettyPrint=true) menambahkan indentasi dan baris baru sehingga berkas hasil enak dibaca manusia. Untuk data berlapis, struct di dalam struct menjadi objek bersarang: struct('tim', struct('nama', 'Riset', 'anggota', 5)) menghasilkan {"tim":{"nama":"Riset","anggota":5}}.

Menyimpan dan Membaca Berkas JSON #

Berkas JSON hanyalah teks, jadi infrastruktur yang kita kuasai di Chapter Membaca File Teks berlaku sepenuhnya. Mekanismenya: fopen mode 'w' + fprintf(fid, '%s', jsonencode(data)) menulis teks JSON; fileread + jsondecode membacanya kembali:

matlab
fid = fopen('konfigurasi.json', 'w');
fprintf(fid, '%s', teks);
fclose(fid);
fprintf('konfigurasi.json tertulis: %d\n', exist('konfigurasi.json', 'file'));

S2 = jsondecode(fileread('konfigurasi.json'));
fprintf('dari berkas: %s versi %d\n', S2.nama_aplikasi, S2.versi);

Output yang Dihasilkan:

text
konfigurasi.json tertulis: 2
dari berkas: AnalisisToko versi 2

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 (fopen + fprintf): format '%s' menulis teks JSON apa adanya tanpa tambahan spasi atau newline — JSON satu baris yang padat.
  2. Baris 5 (fileread): seluruh isi berkas menjadi satu char yang langsung diumpankan ke jsondecode tanpa variabel perantara.
  3. Baris 7 (S2.nama_aplikasi): hasil roundtrip identik dengan struct asal — nilai 2 dan AnalisisToko selamat dua kali perjalanan (encode → file → decode).

Kasus Konfigurasi dan Hasil Analisis #

Dua penggunaan JSON paling sering di pekerjaan analitik: menyimpan konfigurasi (satu objek) dan menyerahkan hasil analisis (array of objects). Mekanismenya: struct array yang dibangun elemen demi elemen dikodekan menjadi array objek, lalu didekode kembali menjadi struct array yang bisa di-loop:

matlab
hasil(1) = struct('bulan', 'Januari', 'pendapatan', 180000);
hasil(2) = struct('bulan', 'Februari', 'pendapatan', 202500);
teks2 = jsonencode(hasil);
fprintf('hasil JSON: %s\n', teks2);

fid = fopen('hasil.json', 'w');
fprintf(fid, '%s', teks2);
fclose(fid);

R = jsondecode(fileread('hasil.json'));
fprintf('hasil: %d bulan, total Rp%d\n', numel(R), sum([R.pendapatan]));

Output yang Dihasilkan:

text
hasil JSON: [{"bulan":"Januari","pendapatan":180000},{"bulan":"Februari","pendapatan":202500}]
hasil: 2 bulan, total Rp382500

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 (hasil(1) = struct(...)): pengisian elemen ke-1 dan ke-2 membangun struct array 1×2 — kedua elemen harus memiliki himpunan field yang sama agar array sah.
  2. Baris 3 (jsonencode(hasil)): struct array menjadi array of objects; setiap elemen [...] satu objek dengan dua kunci.
  3. Baris 10 (sum([R.pendapatan])): [R.pendapatan] mengumpulkan field dari seluruh elemen menjadi satu vektor (pola comma list dari chapter Structure Array), siap dijumlahkan menjadi Rp382.500.

Berkas contoh.m pada bagian bawah halaman menjalankan kedua kasus itu berurutan — konfigurasi lalu hasil analisis — lengkap dengan penulisan berkas, pembacaan ulang, dan pembersihan berkas demo.

Ringkasan #

jsondecode mengubah teks JSON menjadi data MATLAB (objek → struct, array angka → vektor, array objek → struct array), dan jsonencode berjalan sebaliknya dengan struct, cell, serta struct array sebagai masukan. Berkas .json ditulis dengan fopen + fprintf dan dibaca dengan fileread + jsondecode — roundtrip yang menjaga nilai tetap utuh. Format berikutnya lebih tua namun masih merakyat di dunia enterprise: XML, dengan pohon elemen yang kita telusuri di chapter berikutnya.