jsonapidataMenengah3 mnt baca

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
<?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
<?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
<?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: $_POST tidak terisi untuk request JSON mentah dari fetch. 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"]].