About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • PHP
  • /
  • Import JSON dari Web ke MySQL dengan PHP
PHP

Import JSON dari Web ke MySQL dengan PHP

Tutorial PHP kali ini akan membahas bagaimana cara membuat script PHP untuk mengimport data JSON yang tersedia di sebuah URL ke dalam database MySQL/MariaDB. Dalam hal ini data JSON tidak perlu diunduh dulu secara manual di komputer.

Pembahasan akan dipaparkan secara sistematis disertai dengan studi kasus.

Studi kasus yang diberikan kali ini, kita akan mencoba mengimport JSON yang tersedia di situs http://media.mongodb.org/zips.json. Apabila dilihat, maka data JSON yang tersedia tersebut merupakan data kota/daerah yang ada di Inggris, seperti pada tampilan gambar berikut ini.

Struktur isi data file JSON

Berdasarkan data di atas, terlebih dahulu kita coba analisis strukturnya. Pada data JSON tersebut terdapat beberapa baris data, dan pada setiap barisnya terdapat beberapa field yaitu: ‘_id’, ‘city’, ‘loc’ (lokasi), ‘pop’ (populasi), dan ‘state’ (negara bagian). Field ‘_id’ memiliki value berupa kode bertipe string. Demikian pula untuk field ‘city’. Adapun untuk field ‘loc’ menunjukkan koordinat latitude dan longitude dari kota tersebut yang mana kedua value ini bertipe double. Sedangkan value dari field ‘pop’ bertipe integer. Terakhir, ‘state’ memiliki value bertipe string.

Untuk keperluan import ke MySQL, selanjutnya kita persiapkan terlebih dahulu tabel database yang strukturnya menyesuaikan dari karakteristik data hasil analisis sebelumnya. Berikut ini adalah struktur DDL tabelnya.

CREATE TABLE `zip` (
  `id` int(11) DEFAULT NULL,
  `city` varchar(50) DEFAULT NULL,
  `lat` double(50,6) DEFAULT NULL,
  `long` double(50,6) DEFAULT NULL,
  `pop` int(11) DEFAULT NULL,
  `state` varchar(50) DEFAULT NULL
);

Setelah tabel database MySQL/MariaDB dibuat, langkah selanjutnya adalah membuat script PHP nya. Ide dasar langkah proses yang terjadi di dalam script yang akan dibuat adalah sebagai berikut:

  1. Membaca data semua data JSON dari URL
  2. Data keseluruhan yang terbaca, selanjutnya dipecah tiap barisnya. Hal ini dilakukan karena setiap baris data adalah satu record data
  3. Setelah data keseluruhan dipecah menjadi beberapa baris data, untuk setiap baris datanya selanjutnya dilakukan proses parsing data JSON nya. Tujuan dari proses parsing ini adalah mengambil data value yang ada di struktur JSON nya
  4. Dari setiap data value yang sudah diperoleh, selanjutnya disimpan ke dalam tabel zip di database

Dalam hal ini langkah 3 dan 4, dilakukan berulang-ulang untuk setiap baris data.

Berdasarkan ide langkah di atas, selanjutnya dibuat script PHP sebagai berikut:

<?php

// parameter koneksi ke MySQL
$dbhost = "localhost";
$dbuser = "...";
$dbpass = "...";
$dbname = "...";

// baca data file json dr web
$url = "http://media.mongodb.org/zips.json";
$json = file_get_contents($url);

// koneksi ke mysql
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

// memecah data json per baris
$split = explode("\n", $json);

// pemrosesan data json tiap barisnya
foreach ($split as $baris) {
	// proses parsing data json
	$data = json_decode($baris);
	$id = $data->_id;
	$city = $data->city;
	$lat = $data->loc[0];
	$long = $data->loc[1];
	$pop = $data->pop;
	$state = $data->state;

	// insert data hasil parsing ke mysql
	$query = "INSERT INTO zip VALUES ('$id', '$city', '$lat', '$long', '$pop', '$state')";

	$result = mysqli_query($conn, $query);
}

echo "Import Done !!";

// tutup koneksi
mysqli_close($conn);
?>

Dalam script di atas, perintah $json=file_get_contents($url) digunakan untuk membaca semua isi file data berasal dari URL yang ditentukan. Setelah semua data didapatkan, selanjutnya dilakukan proses pemecahan data per barisnya menggunakan perintah explode("\n", $json). Karakter \n menunjukkan pergantian baris string.

Adapun perintah $data = json_decode($baris) ditujukan untuk melakukan proses decoding atau mengubah struktur JSON menjadi struktur data obyek sebagai berikut:

Struktur object hasil decode JSON

Tujuan dari proses decode ini supaya memudahkan dalam mengambil data value dari struktur JSON tersebut.

Setelah obyek hasil decode didapatkan, langkah berikutnya adalah mengambil data value dari tiap fieldnya dengan perintah sbb:

$id = $data->_id;
$city = $data->city;
$lat = $data->loc[0];
$long = $data->loc[1];
$pop = $data->pop;
$state = $data->state;

Khusus untuk mendapatkan data latitude dan longitude agak sedikit berbeda dengan yang lainnya, disebabkan karena struktur ‘loc’ dipecah menjadi dua subnode (lihat struktur obyek di atas).

Setelah semua data value didapatkan, tinggal menyimpannya ke dalam tabel zip di database. Proses di atas ini dilakukan terus menerus untuk setiap baris data.

Hasil import data JSON setelah script di atas dijalankan, akan diperoleh sebuah tabel zip di MySQL/MariaDB dengan isi sbb:

Hasil import

Mudah bukan caranya? Semoga bisa dipahami dengan baik dan bermanfaat.

 

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply