JSON Encode & Decode
Jembatan PHP ke dunia API: ubah array jadi JSON dan sebaliknya.
Kenapa JSON?
Saat PHP berbicara dengan JavaScript, aplikasi mobile, atau API pihak ketiga, mereka butuh format data bersama. JSON adalah format itu: teks ringan yang bisa dibaca semua bahasa. json_encode() mengubah array PHP menjadi JSON, json_decode() mengubah JSON menjadi array PHP. Keduanya adalah paspor PHP ke dunia API.
<?php
// Contoh 1: encode (PHP -> JSON) untuk API
$produk = [
"nama" => "Kopi Susu",
"harga" => 15000,
"tersedia" => true,
"varian" => ["panas", "dingin"],
];
$json = json_encode($produk);
echo $json;
// {"nama":"Kopi Susu","harga":15000,"tersedia":true,"varian":["panas","dingin"]}
// Versi cantik untuk dibaca manusia (debug/log)
echo json_encode($produk, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);Flag JSON_PRETTY_PRINT membuat output berindentasi (untuk debug), JSON_UNESCAPED_UNICODE menjaga karakter non-ASCII ("Kopi Susu" tetap terbaca, bukan \u00e9).
<?php
// Contoh 2: decode (JSON -> PHP) + endpoint API mini
// Data dari JavaScript fetch atau file:
$jsonMasuk = '{"nama":"Sinta","umur":17}';
$data = json_decode($jsonMasuk, true); // true = jadi array asosiatif!
echo $data["nama"]; // "Sinta"
// Tanpa true, hasilnya OBJECT: $data->nama
// Endpoint API mini (api-produk.php)
header("Content-Type: application/json");
$produk = [["nama" => "Kopi", "harga" => 15000]];
echo json_encode(["status" => "ok", "data" => $produk]);
// JavaScript fetch tinggal response.json()Parameter kedua true adalah detail paling penting di json_decode: tanpanya kamu dapat object ($data->nama), dengan true kamu dapat array ($data["nama"]). Pilih sesuai gaya kodemu, tapi konsisten.
Jebakan yang Sering Terjadi
Tidak mengecek error decode. JSON rusak (koma berlebih, kutip salah) membuat json_decode mengembalikan null diam-diam. Selalu cek: if (json_last_error() !== JSON_ERROR_NONE) { /* tolak */ }. Data dari luar tidak pernah bisa dipercaya formatnya.
Encode gagal diam-diam. json_encode mengembalikan false untuk data bermasalah (misalnya string dengan encoding invalid). Untuk API, bungkus dengan JSON_THROW_ON_ERROR agar gagal dengan exception yang jelas, bukan false misterius.
Menyimpan Array ke File/Database
JSON juga berguna sebagai format penyimpanan ringan:
<?php
// Simpan konfigurasi sebagai JSON (lebih rapi dari serialize)
$config = ["host" => "localhost", "port" => 3306, "debug" => true];
file_put_contents("config.json", json_encode($config, JSON_PRETTY_PRINT));
// Baca kembali
$config = json_decode(file_get_contents("config.json"), true);
echo $config["host"]; // localhost
// Catat log terstruktur (satu JSON per baris = JSON Lines)
$log = ["waktu" => date("c"), "user" => "sinta", "aksi" => "login"];
file_put_contents("aktivitas.log", json_encode($log) . "\n", FILE_APPEND);Format "JSON Lines" (satu objek JSON per baris) adalah standar log modern: mudah dibaca manusia per baris, mudah diparsing mesin per baris, dan bisa di-append tanpa merusak struktur.
Catatan teknis:
$_POSTtidak terisi untuk request JSON mentah darifetch. Bacanya:$data = json_decode(file_get_contents("php://input"), true);. Ini pola standar endpoint API PHP modern.
Tantangan
API daftar siswa
Buat file api-siswa.php yang mengirim header Content-Type: application/json dan meng-echo json_encode dari array ["status" => "ok", "jumlah" => 2, "data" => ["Andi", "Budi"]].