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 MATLABjsonencode: mengubah struct, cell, dan array MATLAB menjadi teks JSON- Menyimpan dan membaca berkas
.jsonsecara 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 JSON | Contoh | Hasil 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 |
| angka | 15000 | double |
| boolean | true | logical |
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:
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:
decode: AnalisisToko versi 2 aktif=1Mari kita bedah baris-baris kode di atas:
- Baris 1 (teks JSON sebagai
char): argumenjsondecodeberupa char array atau string scalar — tanda{}menandai objek, tiap pasangan"kunci":nilaidipisah koma. - Baris 3 (
jsondecode(teks)): objek JSON menjadistructskalar dengan tiga field; angka2menjadidouble,truemenjadilogical. - Baris 4 (
fprintf ... %d):S.data_langsungbertipelogicalsehingga dicetak sebagai1— angkaaktif=1itulah tanda nilainyatrue.
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:
cfg = struct('nama_aplikasi', 'AnalisisToko', 'versi', 2, 'data_langsung', true);
teks = jsonencode(cfg);
fprintf('JSON: %s\n', teks);Output yang Dihasilkan:
JSON: {"nama_aplikasi":"AnalisisToko","versi":2,"data_langsung":true}Mari kita bedah baris-baris kode di atas:
- Baris 1 (
struct(...)): urutan argumenstruct('field', nilai, ...)menentukan urutan kunci di keluaran JSON — fieldnama_aplikasiditulis lebih dulu karena dideklarasikan lebih dulu. - Baris 2 (
jsonencode(cfg)): nilaitrue(logical) dikodekan kembali sebagaitrue, angka tanpa tanda kutip, teks berkurung petik ganda — persis konvensi JSON. - Baris 3 (
fprintf): hasiljsonencodeadalahchar, 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:
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:
konfigurasi.json tertulis: 2
dari berkas: AnalisisToko versi 2Mari kita bedah baris-baris kode di atas:
- Baris 1-2 (
fopen+fprintf): format'%s'menulis teks JSON apa adanya tanpa tambahan spasi atau newline — JSON satu baris yang padat. - Baris 5 (
fileread): seluruh isi berkas menjadi satucharyang langsung diumpankan kejsondecodetanpa variabel perantara. - Baris 7 (
S2.nama_aplikasi): hasil roundtrip identik dengan struct asal — nilai2danAnalisisTokoselamat 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:
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:
hasil JSON: [{"bulan":"Januari","pendapatan":180000},{"bulan":"Februari","pendapatan":202500}]
hasil: 2 bulan, total Rp382500Mari kita bedah baris-baris kode di atas:
- 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. - Baris 3 (
jsonencode(hasil)): struct array menjadi array of objects; setiap elemen[...]satu objek dengan dua kunci. - 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.