9. JSON

PHP: Bekerja Dengan JSON

Apa Itu JSON?

JSON adalah singkatan dari Javascript Object Notation.

Ia merupakan tipe data object pada bahasa pemrograman javascript. Struktur datanya jelas dan sederhana, serta mudah dibaca baik oleh mesin mau pun manusia.

Oleh karena itu, JSON merupakan cara standar untuk berkomunikasi antar dua bahasa pemrograman yang berbeda.

Bentuk penyusun utama data JSON ada 2, yaitu:

  • Objek: didefinisikan dengan tanda kurung kurawal ({})
  • Array: didefinisikan dengan tanda kurung siku ([])

Perhatikan contoh berikut:

{
  "nama": "Nurul Huda",
  "domisili": "Surabaya",
  "usia": 23,
  "wni": true,
  "hobi": [
    "Berenang", "Berlari", "Bertamasya"
  ]
}

Data JSON di atas bertipe objek karena ia diapit oleh tanda kurung kurawal ({}). Dan di dalam objek tersebut terdapat 5 buah key atau data, yaitu: namadomisili bertipe data string, usia bertipe data integer, wni bertipe data boolean, dan hobi bertipe data array.

Tidak harus selalu datang dalam bentuk objek, struktur data JSON bisa datang dalam bentuk array:

[
  { "nama": "Nurul Huda" },
  { "nama": "Renza Ilhami Risqi" },
  { "nama": "Taufan Aji" },
  { "nama": "Rahmad Dwi Oktanto" }
]

Pada contoh JSON di atas, ia adalah array yang memiliki 4 buah item. Kenapa array? Karena ia diapit oleh tanda kurung siku ([]). Masing-masing item dari array tersebut adalah objek, karena masing-masing itemnya diapit oleh tanda kurung kurawal ([]).

Parsing JSON String ke PHP

Secara kasat mata jika kita perhatikan struktur data JSON, kita akan dapati bahwa:

  • ia sangat mirip dengan struktur array asosiatif pada PHP jika datang dalam bentuk objek (yaitu dengan tanda kurung kurawal)
  • dan ia sangat mirip dengan struktur array terindeks pada PHP jika datang dalam bentuk array (yaitu dengan tanda kurung siku)

Pertanyaannya: jika kita memiliki suatu data JSON dalam bentuk string, lalu kita akan membacanya dalam PHP, bagaimana caranya?

Caranya adalah: menggunakan fungsi bawaan PHP bernama json_decode.

1. Parsing JSON ke Array PHP

Kita harus perhatikan:

  • jika objek JSON yang akan kita parsing ternyata dalam bentuk array: maka hasil konversinya akan berupa array pula.
  • Sedangkan jika data JSON yang akan kita parsing ternyata dalam bentuk objek, maka hasil konversinya (secara asal) adalah dalam bentuk objek (instan dari kelas stdClass)

Perhatikan contoh berikut:

<?php

$dataJson = "[5, 3, 4, 2, 1]";

$data = json_decode($dataJson);

echo implode(" - ", $data);

Perintah di atas akan menghasilkan output seperti berikut:

5 - 3 - 4 - 2 - 1

Baca jugaManipulasi Array Pada PHP

2. Parsing JSON ke Objek PHP

Kita coba masuk ke contoh yang kedua: jika ternyata objek JSON yang akan kita parsing datang dalam bentuk objek. Maka PHP (secara asal) akan mengkonversi data tersebut ke dalam objek juga. Lebih tepatnya ke dalam instan dari stdClass.

Perhatikan contoh berikut:

<?php

$json = '{
  "nama": "Nurul Huda",
  "domisili": "Surabaya",
  "usia": 23,
  "wni": true,
  "hobi": [
    "Berenang", "Berlari", "Bertamasya"
  ]
}';

$mahasiswa = json_decode($json);

echo "Nama: {$mahasiswa->nama} <br>";
echo "Domisili: {$mahasiswa->domisili} <br>";

echo "Hobi: " . implode(", ", $mahasiswa->hobi);

Jika program di atas dijalankan, maka akan menghasilkan output seperti berikut:

Nama: Nurul Huda
Domisili: Surabaya
Hobi: Berenang, Berlari, Bertamasya

Membuat JSON Dengan PHP

Jika kita ingin membuat data dalam bentuk JSON, kita bisa menggunakan fungsi bawaan PHP bernama json_encode. Fungsi tersebut adalah kebalikan dari fungsi json_encode: yaitu ia akan mengubah data objek atau array dalam PHP menjadi data dalam bentuk JSON.

Perhatikan contoh berikut:

<?php

$mahasiswa = [
  'nama' => 'Nurul Huda',
  'domisili' => 'Surabaya'
];

echo json_encode($mahasiswa);

Kode program di atas akan menghasilkan string JSON sebagaimana berikut:

{"nama":"Nurul Huda","domisili":"Surabaya"}

Atau untuk contoh array terindeks:

<?php

$nilaiUjian = [70, 80, 50, 90];

echo json_encode($nilaiUjian);

Maka kode program di atas akan menghasilkan output:

[70,80,50,90]

Melakukan Perulangan JSON

Misalkan anda memiliki string JSON sebagai berikut:

<?php

$listMahasiswaJSON = '[
  { "nama": "Nurul Huda" },
  { "nama": "Renza Ilhami Risqi" },
  { "nama": "Taufan Aji" },
  { "nama": "Rahmad Dwi Oktanto" }
]';

Lalu anda ingin menampilkan nama dari setiap data di atas. Caranya sangat sederhana sekali:

  1. Pertama anda parsing dulu JSON tersebut ke dalam array PHP
  2. Lalu lakukan perulangan dengan foreach atau metode perulangan yang lainnya

Perhatikan kode program berikut:

<?php

$listMahasiswaJSON = '[
  { "nama": "Nurul Huda" },
  { "nama": "Renza Ilhami Risqi" },
  { "nama": "Taufan Aji" },
  { "nama": "Rahmad Dwi Oktanto" }
]';

$listMahasiswa = json_decode($listMahasiswaJSON);

foreach ($listMahasiswa as $key => $mahasiswa) {
  echo "{$key}. Nama: {$mahasiswa->nama} <br>";
}

Output:

0. Nama: Nurul Huda
1. Nama: Renza Ilhami Risqi
2. Nama: Taufan Aji
3. Nama: Rahmad Dwi Oktanto

Latihan: Menampilkan Berita Dari NewsAPI.org

Telah kita singgung di atas bahwa JSON biasa digunakan sebagai standar pertukaran data dari 2 aplikasi yang berbeda. Bahkan jika keduanya berbeda bahasa pemrograman sekalipun.

Sebagai gambaran, kita akan coba menampilkan data berita yang disediakan oleh newsapi.org. Data yang disediakan berupa JSON. Kita akan menampilkannya dengan PHP.

Langkah-langkah:

  1. Daftar akun newsapi.org untuk mendapatkan API_KEY

  2. Perhatikan struktur data JSON dari URL berikut:

    Jangan lupa ganti API_KEY dengan api key akun anda.

  3. Berikut ini adalah penampakan struktur datanya:

  4. Deklarasikan variabel-variabel:

    <?php
    
    $kataKunci = "corona";
    $from = "2020-02-01";
    $sortBy = "publishedAt";
    $apiKey = ""; /* <-- Silakan register di newsapi.org untuk mendapatkan API_KEY */
    $language = "en";
    $alamatAPI = "http://newsapi.org/v2/everything?" .
        "q={$kataKunci}&language={$language}&from={$from}" .
        "&sortBy={$sortBy}&apiKey={$apiKey}";
    
  5. Ambil data dengan fungsi file_get_contents lalu parsing dengan perintah json_decode:

    <?php
    # ambil data json dari $alamatAPI
    $data = file_get_contents($alamatAPI);
    # parsing variabel $data ke dalam array
    $dataBerita = json_decode($data);
    
  6. Tampilkan data dengan melakukan perulangan foreach:

    <?php
    
    if ($dataBerita->status === "ok") {
        # tampilkan menggunakan perulangan
        foreach ($dataBerita->articles as $berita) {
            echo "<h3><a href='{$berita->url}'>{$berita->title}</a></h3>";
    
            if ($berita->urlToImage) {
                echo "<img style='width: 10rem' src='{$berita->urlToImage}'>";
            }
    
            echo "<p>{$berita->description}</p>";
            echo "<hr>";
        }
    }
    

Dari langkah-langkah di atas, berikut adalah hasil yang saya dapatkan:

Kesimpulan

JSON adalah struktur data bawaan dalam bahasa pemrograman javascript. Akan tetapi karena ia memiliki struktur yang sederhana dan mudah, ia dijadikan sebagai standar untuk perturakan data antar 2 aplikasi yang berbeda bahkan antar 2 bahasa pemrograman yang berbeda.

Dalam PHP: kita bisa mem-parsing JSON dengan perintah json_decode dan kita bisa membuat JSON dengan perintah json_encode.

Pembahasan Selanjutnya

Dalam pembahasan selanjutnya, insyaallah kita akan membahas tentang jenis-jenis error dalam PHP dan juga cara menanganinya.