Apa itu json di php?

Home » JSON » Memahami JSON Pada PHP

Hi, sobat JWD, kali ini kita akan membahas JSON pada PHP.

Sebelumnya, pada artikel Panduan Lengkap Memahami JSON kita sudah membahas secara umum apa itu JSON, nah pada artikel ini, kita akan membahas implementasi JSON pada PHP.

PHP sendiri sudah mengakomodir JSON sejak PHP versi 5.2 dan terus disempurnakan pada PHP versi berikutnya.

Berikut ini contoh implementasi JSON pada PHP dan Javascript.

LIVE DEMO

Environment

Sebelum melangkah lebih jauh, perlu sobat ketahui, bahwa ketika menulis artikel ini, saya menggunakan PHP versi 5.6 yang berjalan di Windows 10.

Dengan demikian, jika sobat menggunakan versi yang berbeda, bisa jadi hasil yang sobat dapatkan berbeda dengan yang ada di artikel ini.

I. Membuat JSON Pada PHP

Untuk membuat JSON di PHP maupun bahasa pemrograman lain, tidak disarankan untuk membuatnya secara manual, kenapa? karena berisiko terjadi error, sebaliknya, selalu gunakan fungsi bawaan (built-in) dalam hal ini fungsi 

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3

Kenapa demikian? karena setiap fungsi bawaan, termasuk PHP akan memperhatikan standar yang ada, sehingga JSON yang dihasilkan bisa dipastikan valid dan memenuhi standar yang ada (ECMA-404)

Contoh penggunaan fungsi 

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3 sebagai berikut:

$config = array(
		'site_title' =>'Jagowebdev'
		,'site_url'=>'https://jagowebdev.com'
		,'themes'=>'crystal'
	);
echo json_encode($config);
// HASIL
{"site_title":"Jagowebdev","site_url":"http:\/\/jagowebdev.com","themes":"crystal"}

I.1. $conn = mysqli_connect('localhost', 'root', '', 'test'); $query = mysqli_query($conn, 'SELECT * FROM config'); while ($row = mysqli_fetch_assoc($query)) { $json[] = $row['value']; } echo '<pre>'; print_r($json); echo '</pre>'; $json = json_encode($json); echo $json;3 – Format Penulisan

Secara umum format penulisan fungsi

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3 adalah sebagai berikut:

json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )

Argumen:

  • Argumen
    $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json[] = $row['value'];
    }
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    7 bisa berisi semua type data termasuk objek dan array, namun tidak termasuk resource. Adapun tipe data yang sering digunakan adalah array. Sebagai tambahan, argumen ini wajib diencode menggunakan UTF-8, hal ini sering menjadi penyebab terjadinya error ketika membuat JSON dari data database
  • Argumen
    $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json[] = $row['value'];
    }
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    8, berupa berbagai opsi yang dapat digunakan untuk mengubah parameter default (argumen ini kita bahas pada bagian bawah).
  • $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json[] = $row['value'];
    }
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    9 merupakan tingkat kedalaman (child) dari argemen
    $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json[] = $row['value'];
    }
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    7.

Karena umumnya yang digunakan adalah array, maka agar pembahasan tidak terlalu panjang, pada bagian ini kita hanya akan membahas penggunaan fungsi

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3 pada array.

I.2.  $conn = mysqli_connect('localhost', 'root', '', 'test'); $query = mysqli_query($conn, 'SELECT * FROM config'); while ($row = mysqli_fetch_assoc($query)) { $json[] = $row['value']; } echo '<pre>'; print_r($json); echo '</pre>'; $json = json_encode($json); echo $json;3 – Dasar Penggunaan

Fungsi 

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3 dapat digunakan baik untuk indexed array, maupun associative array, maupun gabungan keduanya, sebagai contoh kita memiliki tabel di database dengan nama config dengan data sebagai berikut:

idoptionvalue1site_titleJagowebdev2site_descriptionKomunitas Jagowebdev (JWD) akan membantu anda menjadi “Jago” dibidang Web Development3site_urlhttps://jagowebdev.com4pathuser\htdocs\jwd5themesjwd

Contoh 1: indexed array

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;

Hasilnya adalah:

// ARRAY
Array
(
    [0] => Jagowebdev
    [1] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
    [2] => https://jagowebdev.com
    [3] => user\htdocs\jwd
    [4] => jwd
)
// JSON
["Jagowebdev","Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","http:\/\/jagowebdev.com","user\\htdocs\\jwd","jwd"]

Contoh 2: Associative array:

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json['site_option'][ $row['option'] ] = $row['value'];
}
$json['site_db'] = array(
			'host' => 'localhost'
			, 'user' => 'root'
			, 'pass' => 'defult'
		);
					
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;

Hasil yang kita peroleh adalah:

Array
(
    [site_option] => Array
        (
            [site_title] => Jagowebdev
            [site_description] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
            [site_url] => https://jagowebdev.com
            [base_path] => user\htdocs\jwd
            [themes] => jwd
        )

    [site_db] => Array
        (
            [host] => localhost
            [user] => root
            [pass] => defult
        )

)
{"site_option":{"site_title":"Jagowebdev","site_description":"Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","site_url":"http:\/\/jagowebdev.com","base_path":"user\\htdocs\\jwd","themes":"jwd"},"site_db":{"host":"localhost","user":"root","pass":"defult"}}

Jika array berbentuk indexed array, maka JSON yang dihasilkan juga berbentuk array, misal:

$config = array('localhost', 'root', 'pass');
echo json_encode($config);
// Hasil: ["localhost", "root", "pass"]

Jika kita ingin membuatnya menjadi objek maka kita dapat menggunakan opsi

// ARRAY
Array
(
    [0] => Jagowebdev
    [1] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
    [2] => https://jagowebdev.com
    [3] => user\htdocs\jwd
    [4] => jwd
)
// JSON
["Jagowebdev","Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","http:\/\/jagowebdev.com","user\\htdocs\\jwd","jwd"]
4, misal:

$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}

Lebih lanjut tentang array dan objek pada JSON, dapat membaca kembali artikel sebelumnya: Panduan Lengkap Memahami JSON

Error Ketika Membuat JSON dari Data Database

JSON sering digunakan untuk menampilkan data dari database, seperti contoh pada bagian sebelumnya.

Nah, terkait data pada database, datanya bisa beragam, tergantung darimana data tersebut berasal (sebelum masuk ke database) dan bisa jadi tidak diencode menggunakan UTF-8 sehingga mengakibatkan error:

Malformed UTF-8 characters, possibly incorrectly encoded

Pembahasan lebih jauh tentang masalah ini dapat dibaca pada artikel: JSON Error Pada PHP – Membuat JSON Dari Database

Pentingnya escape slash (\/)

Secara default, Mulai PHP versi 5.4.0, fungsi

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3 otomatis akan meng-escape setiap karakter slash, yaitu dari / menjadi \/

Dengan model seperti itu, untuk url, kita akan mendapati bentuk yang agak aneh, misal: https://jagowebdev.com/images/article/json_logo.png menjadi https://jagowebdev.com\/images\/article\/json_logo.png

Di standar JSON, escape ini sifatnya optional, tidak wajib, jika kita tidak menginginkannya, kita dapat menambahkan argumen

// ARRAY
Array
(
    [0] => Jagowebdev
    [1] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
    [2] => https://jagowebdev.com
    [3] => user\htdocs\jwd
    [4] => jwd
)
// JSON
["Jagowebdev","Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","http:\/\/jagowebdev.com","user\\htdocs\\jwd","jwd"]
6.

Lantas, apa manfaat escape ini?

Tujuan utamanya adalah mengantisipasi jika didalam string json terdapat closing tag

// ARRAY
Array
(
    [0] => Jagowebdev
    [1] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
    [2] => https://jagowebdev.com
    [3] => user\htdocs\jwd
    [4] => jwd
)
// JSON
["Jagowebdev","Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","http:\/\/jagowebdev.com","user\\htdocs\\jwd","jwd"]
7, sehingga jika json tersebut diletakkan didalam tag
// ARRAY
Array
(
    [0] => Jagowebdev
    [1] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
    [2] => https://jagowebdev.com
    [3] => user\htdocs\jwd
    [4] => jwd
)
// JSON
["Jagowebdev","Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","http:\/\/jagowebdev.com","user\\htdocs\\jwd","jwd"]
8 akan menyebabkan script utama berhenti dan dieksekusinya code javascript yang ada didalam JSON tersebut, misal:

<script type="text/javascript">
var json = {"content":"</script><script>alert(document.cookie)</script>"}
</script>

Pada contoh diatas, kode javascript yang ada didalam tag 

// ARRAY
Array
(
    [0] => Jagowebdev
    [1] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
    [2] => https://jagowebdev.com
    [3] => user\htdocs\jwd
    [4] => jwd
)
// JSON
["Jagowebdev","Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","http:\/\/jagowebdev.com","user\\htdocs\\jwd","jwd"]
8 yang ada pada data JSON akan dieksekusi, hal ini akan berbahaya dan berpotensi timbul serangan XSS.

Untuk itu sebaiknya biarkan karakter slash di-escape, atau kita dapat meng-escape tersebut jika benar benar tahu data JSON yang kita olah.

I.3 $conn = mysqli_connect('localhost', 'root', '', 'test'); $query = mysqli_query($conn, 'SELECT * FROM config'); while ($row = mysqli_fetch_assoc($query)) { $json['site_option'][ $row['option'] ] = $row['value']; } $json['site_db'] = array( 'host' => 'localhost' , 'user' => 'root' , 'pass' => 'defult' ); echo '<pre>'; print_r($json); echo '</pre>'; $json = json_encode($json); echo $json;0 Argumen Kedua

Fungsi

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3 menyediakan argumen kedua berupa opsi untuk mengubah parameter default, nilai opsi ini berupa bitmask dengan nilai 1, 2, 4, 8, 16, dst, agar lebih mudah, PHP telah menyediakan constant yang mewakili nilai tersebut, diantaranya:

  1. $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json['site_option'][ $row['option'] ] = $row['value'];
    }
    $json['site_db'] = array(
    			'host' => 'localhost'
    			, 'user' => 'root'
    			, 'pass' => 'defult'
    		);
    					
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    2 untuk mengubah tag HTML < dan > menjadi \u003C and \u003E
  2. $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json['site_option'][ $row['option'] ] = $row['value'];
    }
    $json['site_db'] = array(
    			'host' => 'localhost'
    			, 'user' => 'root'
    			, 'pass' => 'defult'
    		);
    					
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    3 mengubah single quote ( ‘ ) menjadi \u0027 Hal ini bermanfaat ketika meletakkan JSON pada atribut elemen HTML
  3. $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json['site_option'][ $row['option'] ] = $row['value'];
    }
    $json['site_db'] = array(
    			'host' => 'localhost'
    			, 'user' => 'root'
    			, 'pass' => 'defult'
    		);
    					
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    4 mengubah double quote ( ” ) menjadi \u0022
  4. $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json['site_option'][ $row['option'] ] = $row['value'];
    }
    $json['site_db'] = array(
    			'host' => 'localhost'
    			, 'user' => 'root'
    			, 'pass' => 'defult'
    		);
    					
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    5 mengubah ( & ) menjadi \u0026
  5. $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json['site_option'][ $row['option'] ] = $row['value'];
    }
    $json['site_db'] = array(
    			'host' => 'localhost'
    			, 'user' => 'root'
    			, 'pass' => 'defult'
    		);
    					
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    6 memformat JSON dengan menambahkan spasi (bukan tab) sehingga menjadi mudah dibaca. Mulai ada di PHP versi 5.4.0. Contoh:
    json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
    0
  6. $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json['site_option'][ $row['option'] ] = $row['value'];
    }
    $json['site_db'] = array(
    			'host' => 'localhost'
    			, 'user' => 'root'
    			, 'pass' => 'defult'
    		);
    					
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    7 membiarkan karakter ( / ) tidak diescape. Contoh:
    json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
    1
  7. // ARRAY
    Array
    (
        [0] => Jagowebdev
        [1] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
        [2] => https://jagowebdev.com
        [3] => user\htdocs\jwd
        [4] => jwd
    )
    // JSON
    ["Jagowebdev","Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","http:\/\/jagowebdev.com","user\\htdocs\\jwd","jwd"]
    4 Jika inputan berupa non-aassociative array, JSON yang dihasilkan tetap berbentuk objek bukan array. Hal ini bermanfaat jika penerima mensyaratkan bahwa JSON harus berbentuk objek. Contoh:
    json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
    2

List constant diatas adalah yang paling sering digunakan, jika Sobat penasaran ingin tahu semua daftar constant yang ada, sobat dapat mengunjungi: PHP: Predefined Constant

Jika ingin menggunakan opsi lebih dari satu, gunakan bitwise OR ( | ), misal:

json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
3

II. Parsing JSON di PHP

Setelah sebelumnya telah kita bahas bagaimana cara membuat JSON di PHP, pada bagian ini, kita bahas bagaimana mengubah JSON tersebut menjadi array maupun object.

Untuk mengubah JSON menjadi array atau object di PHP, kita gunakan fungsi

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json['site_option'][ $row['option'] ] = $row['value'];
}
$json['site_db'] = array(
			'host' => 'localhost'
			, 'user' => 'root'
			, 'pass' => 'defult'
		);
					
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
9, fungsi ini memiliki format penulisan sebagai berikut:

json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
4

Jika argumen kedua dari fungsi ini, yaitu

Array
(
    [site_option] => Array
        (
            [site_title] => Jagowebdev
            [site_description] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
            [site_url] => https://jagowebdev.com
            [base_path] => user\htdocs\jwd
            [themes] => jwd
        )

    [site_db] => Array
        (
            [host] => localhost
            [user] => root
            [pass] => defult
        )

)
{"site_option":{"site_title":"Jagowebdev","site_description":"Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","site_url":"http:\/\/jagowebdev.com","base_path":"user\\htdocs\\jwd","themes":"jwd"},"site_db":{"host":"localhost","user":"root","pass":"defult"}}
0 bernilai
Array
(
    [site_option] => Array
        (
            [site_title] => Jagowebdev
            [site_description] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
            [site_url] => https://jagowebdev.com
            [base_path] => user\htdocs\jwd
            [themes] => jwd
        )

    [site_db] => Array
        (
            [host] => localhost
            [user] => root
            [pass] => defult
        )

)
{"site_option":{"site_title":"Jagowebdev","site_description":"Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","site_url":"http:\/\/jagowebdev.com","base_path":"user\\htdocs\\jwd","themes":"jwd"},"site_db":{"host":"localhost","user":"root","pass":"defult"}}
1, maka output yang dihasilkan adalah array, jika tidak, maka yang dihasilkan adalah objek, misal kita memiliki data JSON sebagai berikut:

json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
5

Contoh 1:  Hasil berupa objek:

json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
6

Contoh 2: Hasil berupa array:

json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
7

Pilih Objek atau Array? hal ini tergantung dari situasi yang ada, umumnya bentuk yang sering digunakan adalah array.

CATATAN:

JSON bisa berasal dari berbagai sumber: baik dari database, file fisik (.txt, .json, dll), maupun dari url eksternal. Agar pembahasan tidak terlalu panjang, pembahasan mengenai topik ini dibahas pada artikel: JSON Pada Javascript

III. Handling Error Pada JSON

Ketika membuat dan memparsing data JSON baik dengan fungsi

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3 maupun
$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json['site_option'][ $row['option'] ] = $row['value'];
}
$json['site_db'] = array(
			'host' => 'localhost'
			, 'user' => 'root'
			, 'pass' => 'defult'
		);
					
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
9, maka ketika terjadi error, keduanya tidak memunculkan pesan error apapun. Fungsi
$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3 hanya menghasilkan nilai kosong, sedangkan pada fungsi 
$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json['site_option'][ $row['option'] ] = $row['value'];
}
$json['site_db'] = array(
			'host' => 'localhost'
			, 'user' => 'root'
			, 'pass' => 'defult'
		);
					
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
9 akan menghasilkan nilai
Array
(
    [site_option] => Array
        (
            [site_title] => Jagowebdev
            [site_description] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
            [site_url] => https://jagowebdev.com
            [base_path] => user\htdocs\jwd
            [themes] => jwd
        )

    [site_db] => Array
        (
            [host] => localhost
            [user] => root
            [pass] => defult
        )

)
{"site_option":{"site_title":"Jagowebdev","site_description":"Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","site_url":"http:\/\/jagowebdev.com","base_path":"user\\htdocs\\jwd","themes":"jwd"},"site_db":{"host":"localhost","user":"root","pass":"defult"}}
6

Nah untuk mengetahui error yang terjadi, terdapat dua cara yang dapat kita lakukan yaitu menggunakan fungsi:

  1.  
    Array
    (
        [site_option] => Array
            (
                [site_title] => Jagowebdev
                [site_description] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
                [site_url] => https://jagowebdev.com
                [base_path] => user\htdocs\jwd
                [themes] => jwd
            )
    
        [site_db] => Array
            (
                [host] => localhost
                [user] => root
                [pass] => defult
            )
    
    )
    {"site_option":{"site_title":"Jagowebdev","site_description":"Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","site_url":"http:\/\/jagowebdev.com","base_path":"user\\htdocs\\jwd","themes":"jwd"},"site_db":{"host":"localhost","user":"root","pass":"defult"}}
    7
    Fungsi ini mulai ada pada PHP versi 5.3.0, fungsi akan menghasilkan nilai integer yang memiliki arti tertentu sebagai hasil dari eksekusi  fungsi 
    $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json[] = $row['value'];
    }
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    3 dan 
    $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json['site_option'][ $row['option'] ] = $row['value'];
    }
    $json['site_db'] = array(
    			'host' => 'localhost'
    			, 'user' => 'root'
    			, 'pass' => 'defult'
    		);
    					
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    9
  2. $config = array('localhost', 'root', 'pass');
    echo json_encode($config);
    // Hasil: ["localhost", "root", "pass"]
    0
    Fungsi ini mulai ada pada PHP versi 5.5.0, fungsi akan langsung menghasilkan pesan yang mecerminkan hasil eksekusi fungsi
    $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json[] = $row['value'];
    }
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    3 dan
    $conn = mysqli_connect('localhost', 'root', '', 'test');
    $query = mysqli_query($conn, 'SELECT * FROM config');
    
    while ($row = mysqli_fetch_assoc($query)) {
    	$json['site_option'][ $row['option'] ] = $row['value'];
    }
    $json['site_db'] = array(
    			'host' => 'localhost'
    			, 'user' => 'root'
    			, 'pass' => 'defult'
    		);
    					
    echo '<pre>'; print_r($json); echo '</pre>';
    $json = json_encode($json);
    echo $json;
    9

Cara paling mudah untuk mengetahui error yang terjadi adalah dengan menggunakan fungsi

$config = array('localhost', 'root', 'pass');
echo json_encode($config);
// Hasil: ["localhost", "root", "pass"]
0 karena yang dimunculkan langsung pesan errornya bukan kode , contoh:

json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
8

NOTE: Terkait contoh diatas, jika tidak terjadi error, maka fungsi

$config = array('localhost', 'root', 'pass');
echo json_encode($config);
// Hasil: ["localhost", "root", "pass"]
0 akan menghasilkan string “No error”

Agar lebih fleksibel dan pesan error lebih terorganisir, kita dapat menggunakan fungsi json_last_error() fungsi ini akan menghasilkan nilai integer mulai dari 0 s.d 10

Nilai integer ini telah diterjemahkan ke bentuk constant sebagai berikut:

Kode Error Pada JSONConstantIntegerArtiVersi PHP

$config = array('localhost', 'root', 'pass');
echo json_encode($config);
// Hasil: ["localhost", "root", "pass"]
50No error has occurred
$config = array('localhost', 'root', 'pass');
echo json_encode($config);
// Hasil: ["localhost", "root", "pass"]
61The maximum stack depth has been exceeded
$config = array('localhost', 'root', 'pass');
echo json_encode($config);
// Hasil: ["localhost", "root", "pass"]
72Invalid or malformed JSON
$config = array('localhost', 'root', 'pass');
echo json_encode($config);
// Hasil: ["localhost", "root", "pass"]
83Control character error, possibly incorrectly encoded
$config = array('localhost', 'root', 'pass');
echo json_encode($config);
// Hasil: ["localhost", "root", "pass"]
94Syntax error
$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}
05Malformed UTF-8 characters, possibly incorrectly encodedPHP 5.3.3
$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}
16One or more recursive references in the value to be encodedPHP 5.5.0
$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}
27One or more 
$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}
3or
$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}
4
values in the value to be encodedPHP 5.5.0
$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}
58A value of a type that cannot be encoded was givenPHP 5.5.0
$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}
69A property name that cannot be encoded was givenPHP 7.0.0
$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}
710Malformed UTF-16 characters, possibly incorrectly encodedPHP 7.0.0

Sehingga jika kita mencetak konstanta tersebut, kita akan mendapatkan nilai integer nya, misal: jika kita jalankan 

$config = array('localhost', 'root', 'pass');
echo json_encode($config, JSON_FORCE_OBJECT);
{"0":"localhost","1":"root","2":"pass"}
8 maka kita akan mendapatkan nilai 4

Dengan model seperti diatas, kita dapat mendefinisikan sendiri pesan error, misal:

json_encode ( $value [, int $options = 0 [, int $depth = 512 ]] )
9

atau

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
0

Untuk menghandle semua pesan error, kita dapat membuat sebuah array dengan format sebagai berikut:

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
1

IV. JSON dan XSS

Setiap string yang berhubungan dengan javascript dan HTML maka akan tidak lepas dari pembahasan tentang XSS, demikian juga JSON.

XSS ini terjadi salah satunya ketika script HTML terdapat element 

// ARRAY
Array
(
    [0] => Jagowebdev
    [1] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
    [2] => https://jagowebdev.com
    [3] => user\htdocs\jwd
    [4] => jwd
)
// JSON
["Jagowebdev","Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","http:\/\/jagowebdev.com","user\\htdocs\\jwd","jwd"]
8 yang berasal dari sumber tidak terpercaya (seperti form input dimana pengunjung bebas memasukkan data).

Element script tersebut tersebut mengandung kode javascript yang akan mengekpose data pribadi user kemudian mengirim data tersebut ke pembuat script.

Terkait dengan JSON, pembuatan JSON dengan fungsi 

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
3 sudah aman, karena (seperti telah disampaikan sebelumnya) fungsi tersebut sudah meng-escape slash ( <\/script> ) – mulai PHP versi 5.4.0 -, sehingga membuat kode javascript di dalam JSON tidak berjalan.

Terlebih lagi, perlindungan terhadap XSS sebenarnya tidak dari sisi JSON nya melainkan pada sisi inputan user, dimana ketika ada inputan dari luar yang akan langsung dieksekusi atau disimpan ke database, data inputan tersebut harus di sanitasi terlebih dahulu, misal menggunakan fungsi

Malformed UTF-8 characters, possibly incorrectly encoded
1 sehingga misal ketika dibuat menjadi JSON atau format lain, data tersebut sudah aman.

Apakah perlu HEX?

Pembahasan yang sering muncul adalah, jika json kita mengandung tag HTML, atau tag 

// ARRAY
Array
(
    [0] => Jagowebdev
    [1] => Komunitas Jagowebdev (JWD) akan membantu anda menjadi "Jago" dibidang Web Development
    [2] => https://jagowebdev.com
    [3] => user\htdocs\jwd
    [4] => jwd
)
// JSON
["Jagowebdev","Komunitas Jagowebdev (JWD) akan membantu anda menjadi \"Jago\" dibidang Web Development","http:\/\/jagowebdev.com","user\\htdocs\\jwd","jwd"]
8, perlukah kita menggunakaan opsi JSON_HEX_XXX untuk mengubah elemen HTML menjadi hex? seperti berikut ini:

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json[] = $row['value'];
}
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
2

Sekali lagi bahwa fungsi

$conn = mysqli_connect('localhost', 'root', '', 'test');
$query = mysqli_query($conn, 'SELECT * FROM config');

while ($row = mysqli_fetch_assoc($query)) {
	$json['site_option'][ $row['option'] ] = $row['value'];
}
$json['site_db'] = array(
			'host' => 'localhost'
			, 'user' => 'root'
			, 'pass' => 'defult'
		);
					
echo '<pre>'; print_r($json); echo '</pre>';
$json = json_encode($json);
echo $json;
0 ini sudah aman sehingga penggunaan argumen JSON_HEX_xxx tidak diperlukan lagi terlebih jika sumber data sudah terpercaya, misal dari server kita sendiri dan kita sendiri yang membuat data tersebut.

V. Penutup

PHP menyediakan tools bawaan yang komplet untuk bekerja dengan JSON, hal yang perlu diperhatikan adalah versi PHP yang kita gunakan, karena pada PHP versi sebelum 5.6, terdapat beberapa bug yang merepotkan.

Demikian pembahasan mengenai JSON Pada PHP semoga bermanfaat. Happy encoding!!!.

Subscibe Now

Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com

Komitmen Kami: Kami senantiasa menghargai privasi Anda dan tidak akan membagikan identitas Anda ke pihak manapun.

JSON digunakan untuk apa?

JSON (JavaScript Object Notation) adalah format file berbasis teks yang umumnya digunakan dalam proses pertukaran data antara server dan klien. File JSON memiliki ekstensi .json serta menggunakan teks yang sama-sama bisa dibaca oleh manusia dan dipahami oleh komputer.

Apa itu XML dan JSON?

XML adalah meta-language seperti tag HTML yang digunakan untuk mendiskripsikan data-data. sedangkan JSON adalah format pertukaran data yang ringan, mudah dibaca dan ditulis oleh manusia, dan serta mudah diterjemahkan dan dibuat oleh komputer. Penelitian ini menerapkan XML dan JSON untuk pembayaran uang kuliah.

Apa singkatan dari JSON?

JSON (dilafalkan "Jason"), singkatan dari JavaScript Object Notation (bahasa Indonesia: notasi objek JavaScript), adalah suatu format ringkas pertukaran data komputer. Formatnya berbasis teks dan terbaca-manusia serta digunakan untuk merepresentasikan struktur data sederhana dan larik asosiatif (disebut objek).

Apa itu JSON API?

Javascript Object Notation (JSON) adalah sebuah format standar yang menggunakan tulisan yang dapat dibaca oleh manusia untuk pertukaran data, yang di dalamnya berisi pasangan antara key dan value.