Cara Encode JSON Object (Manual Parse)

Sebelumnya ada posting yang membahas JSON mengenai cara melakukan Encode & Decode, dan posting ini merupakan pelengkap dari posting sebelumnya.

Saya melakukan encode dengan melakukan json_encode($array, JSON_FORCE_OBJECT), penambahan parameter JSON_FORCE_OBJECT berfungsi agar array key tetap “utuh” dalam format JSON.

Namun, terjadi permasalahan ketika saya mencoba pada PHP versi dibawah 5.3, yaitu versi 5.2.6. Konstanta atau parameter JSON_FORCE_OBJECT tidak dikenal alias ERROR! Karena parameter tersebut tersedia hanya pada versi 5.3 keatas.

Pada saat itu bukanlah hal yang mungkin untuk melakukan upgrade PHP ke versi 5.3 keatas karena sistem operasi pada Server yang digunakan tidak memiliki repositori PHP versi 5.3 keatas, sehingga diperlukan upgrade sistem operasi terlebih dahulu untuk bisa melakukan update ke PHP versi 5.3.

Solusinya? Array di parsing secara manual kedalam bentuk object, seperti ini:

<?php

$json = json_encode((object)$array);

?>

Selesai 😉

Cara melakukan JSON Encode & Decode pada PHP

Pada ReST, seringkali kita menggunakan format JSON atau XML untuk melakukan representasi record pada database.

Pada saat menggunakan format JSON dalam PHP, saya memiliki kasus sebuah array yang memiliki key default, seperti ini:

<?php

$default = array('Spirit', 'Walk', 'Run', 'Jump');

?>

Array Key tersebut secara default tentu akan sama seperti ini:

<?php

$default = array(0 => 'Spirit', 1 => 'Walk', 2 => 'Run', 3 => 'Jump');

?>

Permasalahannya adalah ketika array tersebut di encode kedalam format JSON menggunakan function json_encode(), array key tersebut “hilang”, menjadi seperti ini:

["Spirit","Walk","Run","Jump"]

Salah satu solusinya agar array key tersebut bisa “dibawa” kedalam format JSON, array tersebut harus berbentuk object, dengan menambahkan konstanta JSON_FORCE_OBJECT sebagai parameter function json_encode(), menjadi:

<?php

$encode = json_encode($default, JSON_FORCE_OBJECT);

?>

Sehingga menghasilkan:

{"0":"Spirit","1":"Walk","2":"Run","3":"Jump"}

Dengan menjadikannya object, array key tersebut akan “dibawa” dalam format JSON. 😀

Lalu untuk melakukan proses decode format JSON object tersebut ke dalam bentuk array, gunakan paramater TRUE pada function json_decode(), seperti ini:

<?php

$decode = json_decode($encode, TRUE);

?>

Hasil decode ketika dilakukan var_dump(), kembali menjadi array, seperti ini:

array(4) {
  [0]=>
  string(6) "Spirit"
  [1]=>
  string(4) "Walk"
  [2]=>
  string(3) "Run"
  [3]=>
  string(4) "Jump"
}

Selamat mencoba! 😀

Tutorial Lengkap Instalasi RESTful Web API CodeIgniter

Berawal dari kebutuhan penggunaan REST (Representational State Transfer) untuk melakukan exchange data antar aplikasi web. Saya pun mencoba mempelajarinya mulai dari tulisan ini, karena akhir-akhir ini saya lebih sering menggunakan CodeIgniter. (tulisannya sudah usang ya, ditulis 2010 lho?)

Untuk penggunaannya pada sisi server (REST Server) ternyata sangat mudah dan saya tidak menemui masalah sampai saat ini, bahkan kita sudah dimanjakan dengan berbagai format yang tersedia seperti JSON, XML, CSV dan lain sebagainya.

Pada sisi client, saya pun mencoba untuk mengambil data atau resource yang telah digenerate. Ada dua cara yang bisa dilakukan, yaitu menggunakan function file_get_contents() dan cURL.

  1. file_get_contents() — Dengan menggunakan function file_get_contents() memang sangatlah mudah dalam penggunaannya, hanya saja authentication yang mendukung hanya ‘basic’, ketika saya mencoba menggunakan ‘digest‘ terjadi kegagalan.
  2. cURL — Jika ingin menggunakan opsi ini, penggunaannya cukup kompleks dan dibutuhkan cURL yang telah terinstall. Namun, Philip Sturgeon memberi kemudahan dengan adanya REST Client yang telah dia buat.

Setelah saya mencoba REST Client CodeIgniter yang dibuat oleh Philip tersebut, banyak sekali problem ditemukan. Tak heran banyak sekali keluhan-keluhan di internet berkaitan dengan penggunaan REST Client CodeIgniter ini karena untuk menggunakannya dibutuhkan Sparks Package Manager, sementara Philip sendiri tidak menuliskan secara detil tentang diperlukannya Sparks ini. Ditambah lagi instalasi Sparks ini cukup rumit bagi pemula terutama pengguna Windows.

Instalasi Sparks & Penggunaan REST Client

Permasalahan penggunaan REST Client tersebut dapat diatasi dengan beberapa langkah berikut:

  1. Download terlebih dahulu Sparks di sini
  2. Extract pada folder root CodeIgniter, misalkan: C:\xampp\htdocs\restclient\tools\sparks
  3. Buat file loader baru bernama MY_Loader.php pada direktori application/core/ dengan berisikan source code berikut, paste pada file tersebut
  4. Edit file tersebut dengan merubah kode: define('SPARKPATH', 'sparks/'); menjadi: define('SPARKPATH', 'tools/' . 'sparks/');
  5. Jika menggunakan Windows, pada Computer Properties, tab Advance, tekan button Environment Variables. Pada bagian System Variables, tambahkan Value pada Variable PATH lokasi file php.exe, sehingga value ditambahkan menjadi: ";C:\xampp\php\"
  6. Selanjutnya lakukan Log Off terlebih dahulu
  7. Buka Command Prompt, lalu masuk ke folder tools yang berada di dalam folder root CodeIgniter, misalkan posisi saat ini berada di C:\xampp\htdocs\restclient\tools\.
  8. Install cURL menggunakan perintah: php sparks\spark install -v1.2.0 curl
  9. Install Rest Client menggunakan perintah: php sparks\spark install -v2.1.0 restclient
  10. Penggunaan Rest Client dibutuhkan load melalui spark dengan menggunakan kode: $this->load->spark('restclient/2.1.0');
  11. PENTING: Jika menggunakan authentication, pemanggilan library rest dan initialize perlu dilakukan terpisah. Sehingga menjadi: $this->load->library('rest'); $this->load->initialize($array_params);. Karena setelah saya mencoba memanggil library rest sekaligus dengan initialize, authentication gagal dilakukan!

Setelah saya mencoba mengikuti langkah-langkah diatas, saya bisa menggunakan REST Client dengan baik. Selain itu, saya pun berhasil menggunakan ‘digest’ authentication yang lebih secure. Selamat mencoba! 😀


Featured Image Otomatis pada WordPress

Pada WordPress versi 3.5 keatas, untuk melakukan set featured image (digunakan untuk thumbnails), tidak bisa langsung disekaliguskan pada saat insert image into post.

Sehingga dengan diterapkannya function di bawah ini (pada file function.php), jika melakukan upload image, tidak perlu lagi set featured image, karena telah dilakukan secara otomatis oleh function tersebut.

Dengan begitu, hal ini sedikit meringankan pekerjaan uploader. Walaupun untuk insert image into post yang sudah ada di gallery masih perlu dilakukan manual. It helps a bit! 😀

/**
 * Autoset Featured Image
 *
 * @writer Muhammad Riza Alifi
 * http://wpmu.org/daily-tip-how-to-automatically-set-the-featured-image-in-wordpress/
 */
function autoset_featured() {
  global $post;
  $already_has_thumb = has_post_thumbnail($post->ID);
  if (!$already_has_thumb)  {
    $attached_image = get_children( "post_parent=$post>ID&post_type=attachment&post_mime_type=image&numberposts=1" );
    if ($attached_image) {
      foreach ($attached_image as $attachment_id => $attachment) {
        set_post_thumbnail($post->ID, $attachment_id);
      }
    }
  }
}
add_action('the_post', 'autoset_featured');
add_action('save_post', 'autoset_featured');
add_action('draft_to_publish', 'autoset_featured');
add_action('new_to_publish', 'autoset_featured');
add_action('pending_to_publish', 'autoset_featured');
add_action('future_to_publish', 'autoset_featured');