json error - решение проблемы json_decode() или json_encode()

Четверг, 13 Октябрь 2011

 

В одном из последних проектов на Joomla с K2, столкнулся со следующей проблемой: на сервере заказчика не работала функция декодирования json данных из extrafields полей таблиц К2. Как выяснилось поддержка этой функции осуществляется библиотекой JSON.php, которая включена в ядро PHP только с версии 2.5.0, а на сервере заказчика стоял старенький PHP v 5.1.6, именно поэтому и выводилось сообщение об ошибке (json error) - Call to undefined function json_decode().

 

Сроки поджимали, а отказаться от использования этой функции декодирования было ну никак нельзя, она использовалась для вывода значений из дополнительных полей объектов K2. Просто иначе эти значения нельзя получить, так как в полях таблицы "jos_k2_items" значения этих дополнительных полей хранятся в json закодированной форме и выглядит следующим образом:

 

 
[{"id":"1","value":"\u041a\u0440\u0430\u0439\u0441\u043b\u0435\u0440"},{"id":"2","value":"300\u0421"},{"id":"3","value":"\u0431\u0435\u043b\u044b\u0439"},{"id":"4","value":"10"},{"id":"5","value":"2008"},{"id":"6","value":"50$"}]
 

 

На самом же деле это структура содержащая набор пар ключ/значение, а именно объект Object, который повсеместно используется в joomla. Декодировав же эту json строку функцией json_decode(), получим объект со следующим содержимым:

 

 
Array ( 
[0] => stdClass Object ( [id] => 1 [value] => Toyota ) 
[1] => stdClass Object ( [id] => 2 [value] => Avensis ) 
[2] => stdClass Object ( [id] => 3 [value] => белый ) 
[3] => stdClass Object ( [id] => 4 [value] => 5 ) 
[4] => stdClass Object ( [id] => 5 [value] => 20011 ) 
[5] => stdClass Object ( [id] => 6 [value] => 60$ ) 
)
 

 

Это массив объектов с id соответствующими определенному дополнительному полю K2 и его значение.

 

Так как отказаться от использования json_decode() было нельзя, было найдено решение которое очень просто позволяет подключить недостающую библиотеку JSON в устаревшую версию PHP, дабы не обновлять весь PHP. Решение состоит в том что следует скачать саму библиотеку JSON.tar.gz, разархивировать ее содержимое в нужную папку на вашем сервере (к примеру я поместил папку с библиотекой JSON в "libraries/JSON" - joomla).

 

После этого в нужном месте, там где вы используете функцию json_decode() или json_encode(), подключаете библиотеку:

 

 
<?php
include("./libraries/JSON/JSON.php");
?>
 

 

А затем перед своими функциями кодирования - json_encode() или декодирования json_encode() прописываете следующий код, который использует библиотеку JSON :

 

 
<?php
// Future-friendly json_encode
if( !function_exists('json_encode') ) {
    function json_encode($data) {
        $json = new Services_JSON();
        return( $json->encode($data) );
    }
}
 
 
//или
 
// Future-friendly json_decode
if( !function_exists('json_decode') ) {
  function json_decode($data) {
    $json = new Services_JSON();
    return( $json->decode($data) );
  }
}
?>
 

 

После этого проблема "json error" для PHP <2.5.0 решается и становится возможным использование функция json_encode() и json_encode().

 

PS. Читайте последние записи RSS Подписка на RSS

 

Метки:

Похожие статьи:

Комментарии 

 
anonim Вторник, 27 Январь 2015

Спасибо огроменное

 

 

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