Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

Belajar PHP: Konversi JSON – XML – Array – String

Posted on February 2, 2012

Tutorial kali ini akan membahas konversi antar 3 data interchange yang populer, yaitu JSON, XML dan Array. Untuk library konversi ini, gunakan salah satu library buatan om Rochak Chauchan dari India yang dipublish pada PHPClasses.org.

Untuk file librarynya, kurang lebih sebagai berikut:
[sourcecode language=”php”]
<?php
define("NODE_SEPERATOR","#*#");
define("LINE_SEPERATOR","!#=#!");
define("ERROR_STYLE","color:#fff;background-color:#ff0000;font-weight:bold;padding:5px;margin:5px;");

/**
* This class interchange String, XML, JSON and Array into each other.
*
* @author Rochak Chauhan
* @package PhpJsonXmlArrayStringInterchanger
* @version beta
*/
class PhpJsonXmlArrayStringInterchanger{
private $errorLog=array();

/**
* Function to display last error for debugging purpose
*
* @access public
* @return string
*/
public function displayLastError(){
$return="No errors were encountered.";
$c=count($this->errorLog);
if($c>0){
$i=$c-1;
$return="<div style=’".ERROR_STYLE."’>".$this->errorLog[$i]."</div>";
}
echo $return;
}

/**
* Function to display complete error log for debugging purpose
*
* @access public
* @return string
*/
public function displayErrorLog(){
$return="No errors were encountered.";
$c=count($this->errorLog);
if($c>0){
$return="";
for($i=0;$i<$c;$i++){
$return.="<div style=’".ERROR_STYLE."’>".$this->errorLog[$i]."</div>";
}
}
echo $return;
}

/**
* Function to recursivly parse Xml Content
*
* @param mixed $ret
* @access private
* @return array on success and false on failure
*/
private function parseXml($ret) {
$return=false;
if(is_object($ret)){
$ret=(array)$ret;
$this->parseXml($ret);
}
if(is_array($ret)){
foreach($ret as $k=>$v){
if(is_object($v)){
$return[$k]=$this->parseXml($v);
}
else {
$return[$k]=$v ;
}
}
}
return $return;
}

/**
* Function to convert XML into Array
*
* @param string $xmlContent
* @access public
* @return array on success and false on failure
*/
public function convertXmlToArray($xmlContent){
$return=false;
$ret=simplexml_load_string($xmlContent);
if($ret===false){
$this->errorLog[]="Invalid XML content: $xmlContent in function: ".__FUNCTION__." on line: ".__LINE__." in filename= ".__FILE__;
return false;
}
else{
$return=$this->parseXml($ret);
if($return===false){
$this->errorLog[]="Failed to parse XML content in function: ".__FUNCTION__." on line: ".__LINE__." in filename= ".__FILE__;
return false;
}
}
return $return;
}

/**
* Function to recursivly parse Array Content
*
* @param mixed $ret
* @access private
* @return string(xml) on success and false on failure
*/
private function parseArray($array) {
if(is_array($array)){
foreach($array as $k=>$v){
if(trim($k)==""){
$this->errorLog[]="Array needs to be associative as parameter in function: ".__FUNCTION__." on line: ".__LINE__." in filename= ".__FILE__;
return false;
}
else{
if (is_numeric($k)) {
$k="nodeValue$k";
}
if(is_array($v)){
$return.="<$k>".$this->parseArray($v)."</$k>";
}
else {
$return.="<$k>$v</$k>";
}
}
}
}
else{
$this->errorLog[]="Invalid array in function: ".__FUNCTION__." on line: ".__LINE__." in filename= ".__FILE__;
return false;
}
return $return;
}

/**
* Function to convert an associative array into XML
*
* @param string $array
* @access public
* @return string(xml) on success and false on failure
*/
public function convertArrayToXML($array){
$return="<?xml version=’1.0′ encoding=’ISO-8859-1′?><PhpJsonXmlArrayStringInterchanger>";
$return.=$this->parseArray($array);
$return.="</PhpJsonXmlArrayStringInterchanger>";
return $return;
}

/**
* Function to convert an JSON into XML
*
* @param string $json
* @access public
* @return string(xml) on success and false on failure
*/
public function convertJsonToXML($json){
if(!is_string($json)){
$this->errorLog[]="The first parameter should to be string in function: ".__FUNCTION__." on line: ".__LINE__." in filename= ".__FILE__;
return false;
}
$array=json_decode($json,true);
if($array===false){
$this->errorLog[]="Failed to decode JSON in function: ".__FUNCTION__." on line: ".__LINE__." in filename= ".__FILE__;
return false;
}
else{
return $this->convertArrayToXML($array);
}
}

/**
* Function to convert an JSON into array
*
* @param string $json
* @access public
* @return array on success and false on failure
*/
public function convertJsonToArray($json){
if(!is_string($json)){
$this->errorLog[]="The first parameter should to be string in function: ".__FUNCTION__." on line: ".__LINE__." in filename= ".__FILE__;
return false;
}
$array=json_decode($json,true);
if($array===false){
$this->errorLog[]="Failed to decode JSON in function: ".__FUNCTION__." on line: ".__LINE__." in filename= ".__FILE__;
return false;
}
else{
return $array;
}
}

/**
* Function to parse String and convert it into array
*
* @param array $array
* @access public
* @return array on success and false on failure
* @todo refactor the code from line 205-222 (automate it)
*/
public function convertStringToArray($string,&$myarray=""){
$lines = explode(LINE_SEPERATOR,$string);
foreach ($lines as $value){
$items = explode(NODE_SEPERATOR,$value);
if (sizeof($items) == 2){
$myarray[$items[0]] = $items[1];
}
elseif (sizeof($items) == 3){
$myarray[$items[0]][$items[1]] = $items[2];
}
elseif (sizeof($items) == 4){
$myarray[$items[0]][$items[1]] [$items[2]] = $items[3];
}
elseif (sizeof($items) == 5){
$myarray[$items[0]][$items[1]] [$items[2]][$items[3]] = $items[4];
}
elseif (sizeof($items) == 6){
$myarray[$items[0]][$items[1]] [$items[2]][$items[3]][$items[4]] = $items[5];
}
elseif (sizeof($items) == 7){
$myarray[$items[0]][$items[1]] [$items[2]][$items[3]][$items[4]][$items[5]] = $items[6];
}
}
return $myarray;
}

/**
* Function to parse Array and convert it into string
*
* @param array $array
* @access private
* @return string on success and false on failure
*/
private function convertArrayToString($myarray,&$output="",&$parentkey=""){
if(is_array($myarray)){
if (trim($parentkey)=="") {
$parentkey=LINE_SEPERATOR;
}
foreach($myarray as $key=>$value){
if (is_array($value)) {
$parentkey .= $key.NODE_SEPERATOR;
$this->convertArrayToString($value,$output,$parentkey);
$parentkey = "";
}
else {
$output .= $parentkey.$key.NODE_SEPERATOR.$value.LINE_SEPERATOR;
}
}
}
else{
$this->errorLog[]="Invalid array in function: ".__FUNCTION__." on line: ".__LINE__." in filename= ".__FILE__;
return false;
}
return $output;
}

/**
* Function to convert XML into string
*
* @param string $xml
* @return string on success and false on failure
*/
public function convertXmltoString($xml){
$array=$this->convertXmlToArray($xml);
if ($array===false) {
return false;
}
else {
return $this->convertArrayToString($array);
}
}
}
?>
[/sourcecode]

Contoh Penerapan

Contoh data kasar (json, xml, dan array):
[sourcecode language=”php”]
<?php
$sampleXml='<?xml version="1.0" encoding="ISO-8859-1"?>
<mainNode>
<node1>
<FirstName>First Name1</FirstName>
<LastName>Last Name1</LastName>
<Misc>
<sample1>A1</sample1>
<sample2>A2</sample2>
</Misc>
</node1>
<node2>
<FirstName>First Name2</FirstName>
<LastName>Last Name2</LastName>
<Misc>
<sample1>B1</sample1>
<sample2>B2</sample2>
</Misc>
</node2>
<node3>
<FirstName>First Name3</FirstName>
<LastName>Last Name3</LastName>
<Misc>
<sample1>C1</sample1>
<sample2>C2</sample2>
</Misc>
</node3>
</mainNode>’;

$sampleArray=array(
‘node1’=>array("abc"=>1234),
‘node2’=>array("xyz"=>9876)
);

$sampleJson='{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}’;

$sampleString="!#=#!node1#*#FirstName#*#First Name1!#=#!!#=#!node1#*#LastName#*#Last Name1!#=#!!#=#!node1#*#Misc#*#sample1#*#A1!#=#!!#=#!node1#*#Misc#*#sample2#*#A2!#=#!node2#*#FirstName#*#First Name2!#=#!node2#*#LastName#*#Last Name2!#=#!node2#*#Misc#*#sample1#*#B1!#=#!node2#*#Misc#*#sample2#*#B2!#=#!node3#*#FirstName#*#First Name3!#=#!node3#*#LastName#*#Last Name3!#=#!node3#*#Misc#*#sample1#*#C1!#=#!node3#*#Misc#*#sample2#*#C2!#=#!";

//Create class object
require_once("PhpJsonXmlArrayStringInterchanger.inc.php");
$object=new PhpJsonXmlArrayStringInterchanger();
?>
[/sourcecode]

Konversi XML ke Array

[sourcecode language=”php”]
//XML to Array
$array=$object->convertXmltoArray($sampleXml);
if($array===false){
//$object->displayErrorLog();
$object->displayLastError();
}
else{
echo "<pre>";
print_r($array);
exit;
}
[/sourcecode]

Konversi Array ke XML

[sourcecode language=”php”]
// Array to xml
$xml=$object->convertArrayToXML($sampleArray);
if($xml===false){
//$object->displayErrorLog();
$object->displayLastError();
}
else{
header("content-type: text/xml");
echo $xml;
exit;
}
[/sourcecode]

Konversi JSON ke XML

[sourcecode language=”php”]
// JSON to xml
$xml=$object->convertJsonToXML($sampleJson);
if($xml===false){
//$object->displayErrorLog();
$object->displayLastError();
}
else{
header("content-type: text/xml");
echo $xml;
exit;
}
[/sourcecode]

Konversi JSON ke Array

[sourcecode language=”php”]
// JSON to array
$array=$object->convertJsonToArray($sampleJson);
if($array===false){
//$object->displayErrorLog();
$object->displayLastError();
}
else{
echo "<pre>";
print_r($array);
exit;
}
[/sourcecode]

Konversi XML ke String

[sourcecode language=”php”]
//XML to String
$string=$object->convertXmltoString($sampleXml);
if($string===false){
//$object->displayErrorLog();
$object->displayLastError();
}
else{
echo $string;exit;
}
[/sourcecode]

Konversi String ke Array

[sourcecode language=”php”]
//String to Array
$array=$object->convertStringToArray($sampleString);
if($array===false){
//$object->displayErrorLog();
$object->displayLastError();
}
else{
echo "<pre>";
print_r($array);
}
[/sourcecode]

Bagaimana dengan contoh diatas? mudah kan mengkonversi antar tipe data dengan PHP dan library ini?. Selamat mencoba.

Terbaru

  • Apa Itu Lepas Kolpri? Ini Pengertian dan Fenomenanya di Dunia Gaming
  • Pixel Buds Pro Mendapatkan Pembaruan Perangkat Lunak Baru dengan Dukungan ANC Adaptif dan Peningkatan Audio
  • Mous Pixel Watch 4 Akan Hadir dengan Charger Baru dan Fitur-Fitur Terbaru
  • Hati-hati, Video Asli Botol Golda Viral Season 4 Full 6.30 Menit, Cek Link dan Faktanya disini!
  • Google Docs Mendapatkan Material 3 dan Desain Ekspresif Baru, Fokus pada Kreativitas dan Kolaborasi
  • Belum Tahu? Ini Trik Hitung Cost Per Gigabyte Supaya Gak Boncos Saat Beli Paket Internet
  • Apple TV dan Google Cast Akan Terintegrasi Lebih Dalam, Menawarkan Pengalaman Streaming yang Lebih Baik
  • Lagi Rame Botol Golda Viral 19 Detik? APA ITU? Jangan Asal Klik Link Sembarangan, Ini Bahayanya!
  • Apa itu Regedit FF Auto Headshot 100 No Password 2024? Simak Definisi dan Cara Kerjanya
  • Apa Itu KPH dan MPH? Pengertian dan Perbedaannya di Game Balap
  • Belum Tahu? Inilah Cara Aman Quotex Login dan Solusi Kalau Error!
  • Apa Itu Fitur Gestur Baru di Pixel Watch 4? Ini Pengertian dan Perbedaannya
  • Belum Tahu? Inilah Cara Aman Login Binomo dan Trik Trading Buat Pemula Biar Nggak Boncos
  • Cara Mengatasi Error ‘Versi Diagnostik Belum Terbarui’ (Your current version of diagnostics is not up to date)
  • Cara Membuat Newsletter di Outlook 365
  • Sering Telepon di Tempat Berisik? Fitur Baru Expressive Call dari Google Bakal Jadi Penyelamat Kalian!
  • Google Pixel 10 Pro Akan Punya Integrasi Play Points Lebih Dalam
  • Stop Cara Kuno! Ini Trik Supaya Manajemen Karyawan Jadi Lebih Cepat dan Anti Ribet
  • Bug di Aplikasi Cuaca Wear OS Google: Update Tidak Ngaruh!
  • Samsung Kembangkan Sensor Kamera Baru Pakai Teknologi Global Shutter dan Efek Blur Bergerak
  • Cara Membuat Anggaran Otomatis di Excel
  • Baseus X1 Pro Kamera: Kamera Ringkas dengan Fitur Canggih dan Harga yang Menarik
  • Profil Sosmed Kalian Sepi? Gini Caranya Makeover Bio Biar Makin Dilirik Sama Netizen!
  • Cara Mengatasi Error ‘Disk is Full or Read-Only’
  • Belum Tahu? Inilah Trik Ampuh Atasi Error ‘We Were Unable To Create Your Notebook’ di OneNote
  • Trik Instagram Stories 2025: Ubah Viewer Jadi Loyal Follower dengan Fitur Sederhana Ini
  • Turning TikTok into a Money-Making Machine
  • Cara Ekstrak Driver Intel RST/VMD dari setuprst.exe: Panduan Lengkap
  • Pixel 8 dan 8 Pro Akan Punya Kamera Baru Resolusi 10.2MP, Hasil Lebih Baik di Kondisi Redup
  • Inilah Trik Website Kalian Lolos Core Web Vitals dan Ranking Naik
  • Ini Dia ESP32 P4: IoT RISC-V dengan Layar AMOLED dan LoRa, Perangkat Handheld Inovatif
  • Apa Itu HealthyPi-6? Solusi Open Source untuk Akuisisi Biosignal
  • Jetson THOR Industrial PC: 25Gbe Networking dan Bisa Pakai Kamera GMSL2
  • Azul Systems Akuisisi Payara Java Server
  • PC Kentang Jadi Ngebut? Coba GRML 2025, Distro Debian Ringan dengan Kernel 6.17!
  • Apa Itu US National Framework for AI? Kepres Donald Trump Bikin Heboh Dunia AI
  • Kenapa Bisnis Properti & Real Estate Harus Pakai AI, Ini Alasannya!
  • BARU! Brave Browser Bakal Bisa Ngerjain Tugas Kalian Secara Otomatis Lewat Agentic AI!
  • Belum Tahu? Google Maps Bakal Makin Canggih Berkat Integrasi Gemini Visual Ini!
  • Siap-Siap! Tahun 2026 Gemini Bakal “Menjajah” Chrome, iPhone, sampai Smartwatch Kalian
  • Apa itu Data Breach Coupang? Pengertian dan Kronologi Kebocoran Data Terbesar di Korea Selatan
  • Apa Itu CVE-2018-4063? Pengertian Celah Keamanan Sierra Wireless AirLink yang Masuk Katalog CISA
  • Apa Itu Ashen Lepus? Kelompok Peretas yang Mengincar Instansi Pemerintah Timur Tengah
  • Pengertian Vulnerability WebKit Apple Terbaru: Apa Itu CVE-2025-43529 dan CVE-2025-14174?
  • Apa Itu Fake OSINT? Definisi dan Bahaya Repositori GitHub Palsu

©2025 emka.web.id | Design: Newspaperly WordPress Theme