Mengelola data JSON di PHP dan Javascript

| | | PHP, Javascript
Mengelola data JSON di PHP dan Javascript

JSON jika dilafalkan jadi “jay-son”, singkatan dari JavaScript Object Notation, adalah format pertukaran data berbasis teks yang ringkas dan tidak bergantung pada bahasa pemrograman. sering dianggap sebagai alternatif ringan XML. hampir semua REST API yang pernah saya pakai mengembalikan data dalam bentuk JSON, jadi mau ngoding backend atau frontend, pasti ketemu sama format ini.

awalnya JSON lahir dari bahasa JavaScript, tapi sekarang semua bahasa punya dukungannya. file JSON biasanya berekstensi .json.

Struktur Objek JSON

aturan dasar JSON:

  • nama key harus string yang diapit tanda kutip ganda
  • nilainya bisa string, angka, array, boolean, null, atau objek JSON lain

berikut syntax dasar JSON:

{
  "keyA": "valueA",
  "keyB": {
    "keyC": "valueB",
    "keyD": "valueC"
  }
}

JSON mendukung berbagai tipe data:

  • Number : bilangan bulat atau desimal
  • String : teks yang diapit tanda kutip ganda
  • Boolean : true atau false
  • Array : kumpulan nilai yang diapit [ ] dan dipisah koma
  • Object : kumpulan key-value yang diapit { } dan dipisah koma
  • null : nilai kosong

contoh JSON lengkap semua tipe data:

{
    "firstName": "John",
    "lastName": "Snow",
    "age": 25,
    "children": [],
    "spouse": null,
    "address": {
        "street": "7504 Taylor Drive",
        "city": "New York City",
        "state": "New York",
        "postalCode": "11238"
    },
    "phoneNumbers": [
        {
            "type": "mobile",
            "number": "212 555-3346"
        },
        {
            "type": "fax",
            "number": "646 555-4567"
        }
    ]
}

perhatikan key seperti firstName, age, dan address selalu pakai tanda kutip ganda. itu aturan wajib JSON, beda dengan objek JavaScript biasa yang boleh tanpa kutip.

Parsing data JSON di PHP

di PHP, untuk mengubah string JSON menjadi array, pakai json_decode. berikut contohnya:

// menerima data dari API, biasanya string JSON
$response = '{"id":444,"nama":"sigit","status":"single"}';

// melakukan parsing, parameter kedua true menghasilkan array assoc
$user = json_decode($response, true);

echo $user["id"];
// Output: 444

echo $user["nama"];
// Output: sigit

penjelasan :

  • json_decode($response, true) : mengubah string JSON menjadi array PHP. parameter kedua true membuat hasilnya array, tanpa itu hasilnya object stdClass
  • kalau tidak pakai true, aksesnya jadi $user->id bukan $user["id"]

Mengubah array PHP jadi JSON

kebalikannya, untuk mengirim data dalam bentuk JSON, pakai json_encode:

$user = [
    'id'   => 444,
    'nama' => 'sigit',
];

echo json_encode($user);
// Output: {"id":444,"nama":"sigit"}

contoh ini biasa dipakai untuk mengembalikan respons API:

header('Content-Type: application/json');
echo json_encode(['status' => true, 'message' => 'ok']);

Parsing data JSON di JavaScript

di JavaScript, untuk mengubah string JSON jadi objek, pakai JSON.parse:

// menerima data dari API, biasanya string JSON
const response = '{"id":444,"nama":"sigit","status":"single"}';

// melakukan parsing
const user = JSON.parse(response);

console.log(user.id);
// Output: 444

console.log(user.nama);
// Output: sigit

penjelasan :

  • JSON.parse(response) : mengubah string JSON menjadi objek JavaScript
  • user.id : mengambil nilai berdasarkan key

Mengubah objek JavaScript jadi string JSON

kebalikannya, pakai JSON.stringify:

const user = {
  id: 444,
  nama: 'sigit',
};

console.log(JSON.stringify(user));
// Output: {"id":444,"nama":"sigit"}

ini berguna saat mau mengirim data ke server lewat fetch atau AJAX:

fetch('https://api.contoh.com/user', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(user),
});

Membaca dan Menulis File JSON di PHP

Selain parsing JSON dari string, kalian juga bisa baca dan tulis file .json langsung. Ini sering dipakai untuk konfigurasi aplikasi atau menyimpan data sederhana.

Membaca file JSON

// baca seluruh isi file sebagai string
$jsonString = file_get_contents('config.json');

// parsing jadi array PHP
$config = json_decode($jsonString, true);

echo $config['app_name'];
$data = [
    'nama' => 'sigit',
    'email' => '[email protected]',
];

// konversi array ke string JSON
$jsonString = json_encode($data, JSON_PRETTY_PRINT);

// tulis ke file
file_put_contents('user.json', $jsonString);

hasilnya di user.json:

{
    "nama": "sigit",
    "email": "[email protected]"
}

Pretty print dengan JSON_PRETTY_PRINT

kalian perhatikan contoh di atas pakai flag JSON_PRETTY_PRINT. tanpa itu, JSON-nya jadi satu baris:

echo json_encode($data);
// Output: {"nama":"sigit","email":"[email protected]"}

echo json_encode($data, JSON_PRETTY_PRINT);
// Output:
// {
//     "nama": "sigit",
//     "email": "[email protected]"
// }

JSON_PRETTY_PRINT penting banget saat kalian mau debug atau biar file-nya mudah dibaca manusia.

Menangani JSON Bersarang (Nested)

JSON реально sering punya struktur bersarang. Misal data karyawan dengan array di dalamnya:

{
    "perusahaan": "PT Contoh",
    "karyawan": [
        {
            "id": 1,
            "nama": "budi",
            "posisi": "backend",
            "skills": ["php", "mysql", "laravel"]
        },
        {
            "id": 2,
            "nama": "siti",
            "posisi": "frontend",
            "skills": ["vuejs", "css", "javascript"]
        }
    ]
}

parsing dan akses data nested di PHP:

$jsonString = file_get_contents('perusahaan.json');
$data = json_decode($jsonString, true);

// akses data luar
echo $data['perusahaan']; // PT Contoh

// akses array karyawan
foreach ($data['karyawan'] as $karyawan) {
    echo $karyawan['nama'] . ' - ';
    echo implode(', ', $karyawan['skills']);
    echo "\n";
}

output:

budi - php, mysql, laravel
siti - vuejs, css, javascript

Akses skill karyawan berdasarkan id

$idCari = 2;
foreach ($data['karyawan'] as $karyawan) {
    if ($karyawan['id'] === $idCari) {
        echo "Skill {$karyawan['nama']}: ";
        echo implode(', ', $karyawan['skills']);
    }
}

Error Handling JSON

Validasi JSON itu penting. Kalau string-nya invalid, json_decode return null dan kalian bisa dapat error.

$invalidJson = '{nama: "test"}'; // JSON invalid, key tanpa kutip

$result = json_decode($invalidJson);

if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON Error: " . json_last_error_msg();
    // JSON Error: Control character error, possibly incorrectly encoded
}

Validasi sebelum decode

function isValidJson(string $string): bool {
    json_decode($string);
    return json_last_error() === JSON_ERROR_NONE;
}

$testString = '{"nama": "test"}';
if (isValidJson($testString)) {
    $data = json_decode($testString, true);
    // proses data...
} else {
    echo "String bukan JSON yang valid";
}

Handle JSON dengan karakter khusus

JSON wajib di-encode sebagai UTF-8. Kalau ada karakter non-UTF8, pakai flag JSON_UNESCAPED_UNICODE:

$data = [
    'nama' => '新年快乐', // karakter Mandarin
    'pesan' => 'Selamat Tahun Baru! 🎉',
];

echo json_encode($data);
// Output: {"nama":"\u65b0\u5e74\u5feb\u4e50","pesan":"Selamat Tahun Baru! 🎉"}

echo json_encode($data, JSON_UNESCAPED_UNICODE);
// Output: {"nama":"新年快乐","pesan":"Selamat Tahun Baru! 🎉"}

Studi Kasus: Aplikasi Todo List Sederhana

Berikut contoh lengkap pakai JSON sebagai storage sederhana tanpa database:

Struktur file

project/
├── index.php
├── todos.json

todos.json (data awal)

[]

index.php

<?php
// baca data dari file JSON
$todos = [];
if (file_exists('todos.json')) {
    $json = file_get_contents('todos.json');
    $todos = json_decode($json, true) ?? [];
}

// proses tambah todo
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['todo'])) {
    $todos[] = [
        'id' => time(),
        'text' => $_POST['todo'],
        'done' => false,
    ];
    file_put_contents('todos.json', json_encode($todos, JSON_PRETTY_PRINT));
}

// proses toggle done
if (isset($_GET['toggle'])) {
    $id = (int) $_GET['toggle'];
    foreach ($todos as &$todo) {
        if ($todo['id'] === $id) {
            $todo['done'] = !$todo['done'];
        }
    }
    file_put_contents('todos.json', json_encode($todos, JSON_PRETTY_PRINT));
    header('Location: index.php');
    exit;
}
?>

<h1>Todo List</h1>
<form method="POST">
    <input type="text" name="todo" placeholder="Todo baru..." required>
    <button type="submit">Tambah</button>
</form>

<ul>
<?php foreach ($todos as $todo): ?>
    <li style="text-decoration: <?= $todo['done'] ? 'line-through' : 'none' ?>">
        <?= htmlspecialchars($todo['text']) ?>
        <a href="?toggle=<?= $todo['id'] ?>">
            [<?= $todo['done'] ? 'undo' : 'done' ?>]
        </a>
    </li>
<?php endforeach; ?>
</ul>

contoh ini menunjukkan cara pakai JSON sebagai storage sederhana. untuk production, pakai database ya , JSON file cocok cuma buat demo atau data yang sangat ringan.

Kesimpulan

  • JSON dipakai untuk menampilkan data dari backend ke frontend lewat REST API
  • parsing JSON di PHP pakai json_decode, dan mengubahnya kembali pakai json_encode
  • parsing JSON di JavaScript pakai JSON.parse, dan mengubahnya kembali pakai JSON.stringify
  • key JSON wajib diapit tanda kutip ganda
  • baca/tulis file JSON pakai file_get_contents dan file_put_contents
  • pakai JSON_PRETTY_PRINT biar output JSON mudah dibaca
  • selalu validasi JSON dengan json_last_error() sebelum proses lebih lanjut
  • untuk data bersarang, akses pakai array notation seperti $data['karyawan'][0]['skills']

sekian penjelasan dan implementasi JSON di PHP dan JavaScript, semoga paham cara ngolahnya.

Pertanyaan yang Sering Diajukan

Apa itu JSON?

JSON (JavaScript Object Notation) adalah format pertukaran data berbasis teks yang ringkas dan tidak bergantung pada bahasa. JSON dipakai hampir semua REST API untuk bertukar data antara frontend dan backend.

Bagaimana cara parsing JSON di PHP?

Pakai json_decode($json, true). Parameter kedua true membuat hasilnya array assoc PHP, kalau tanpa true hasilnya object stdClass.

Bagaimana cara parsing JSON di JavaScript?

Pakai JSON.parse($jsonString) untuk mengubah string JSON jadi objek JavaScript, dan JSON.stringify($obj) untuk kebalikannya, mengubah objek jadi string JSON.

Cara menampilkan data JSON berdasarkan id di PHP?

Setelah json_decode menjadi array, akses langsung key-nya, misal $user["id"]. Kalau hasilnya objek, pakai $user->id.

Sigit Nurhanafi avatar
Full-stack developer & technical writer. Berpengalaman di PHP, Laravel, NodeJS, MySQL, dan Python. Aktif menulis tutorial pemrograman dan maintaining open-source projects di PemburuKode sejak 2021.