json_encode i json_decode - як застрахуватись від проблем


Маю надію, що ви вже розібрались що таке JSON, і активно його використовуєте. наприклад в аякс запитах. Впринципі в php починаючи з версії 5.2.0 функції json_encode i json_decode присутні. Але я вже кілька раз зустрічався з ситуацією, коли після перенесення сайту на інший хостінг ставались дивні помилки. Після дебагу я розумів, що просто на сервері відключені ці функції. Через те щоб не мати лишнії проблем можна використовувати дані функції. які є аналогами стандартних.

JSON_ENCODE:

 function array2json($arr) {
        $parts = array();
        $is_list = false;
        
        if (!is_array($arr)) return;
        if (count($arr)<1) return '{}';
        
        //Find out if the given array is a numerical array
        $keys = array_keys($arr);
        $max_length = count($arr);
                
        if(($keys[0] == 0) and ($keys[$max_length] == $max_length)) {//See if the first key is 0 and last key is length - 1
            $is_list = true;
            for($i=0; $i                if($i != $keys[$i]) { //A key fails at position check.
                    $is_list = false; //It is an associative array.
                    break;
                }
            }
        }
        foreach($arr as $key=>$value) {
            if(is_array($value)) { //Custom handling for arrays
                if($is_list) $parts[] = array2json($value); /* :RECURSION: */
                else $parts[] = '"' . $key . '":' . array2json($value); /* :RECURSION: */
            } else {
                $str = '';
                if(!$is_list) $str = '"' . $key . '":';
                //Custom handling for multiple data types
                if(is_numeric($value)) $str .= $value; //Numbers
                elseif($value === false) $str .= 'false'; //The booleans
                elseif($value === true) $str .= 'true';
                else $str .= '"' . addslashes($value) . '"'; //All other things
                // :TODO: Is there any more datatype we should be in the lookout for? (Object?)
                $parts[] = $str;
            }
        }
        $json = implode(',',$parts);
        if($is_list) return '[' . $json . ']';//Return numerical JSON
        return '{' . $json . '}';//Return associative JSON
    }

JSON_DECODE:

function json2array($json){
   if(get_magic_quotes_gpc()){
      $json = stripslashes($json);
   }
   $json = substr($json, 1, -1);
   $json = str_replace(array(":", "{", "[", "}", "]"), array("=>", "array(", "array(", ")", ")"), $json);
   @eval("\$json_array = array({$json});");
   return $json_array;
}

 

Bookmark and Share

Дата: 27 квітня 2010р.
Переглядів: 240



Оцінити:
1 2 3 4 5 6 7 8 9 10  

На головну

Коментарі:

Добавити новий коментарій:



Ваше ім'я:
Ваш e-mail:
 
Ваш коментарій:










 volodymyr.labo 8715026





Система Orphus
Copyright © 2009-2010 - Лабо Володимир. Всі права захищені.
Розробка та дизайн - Володимир Лабо