Как мне кодировать массив в JSON без json_encode ()? - PullRequest
4 голосов
/ 25 марта 2011

Я очень плохо знаком с PHP, но теперь я должен помочь моему другу решить проблему PHP.

Он купил веб-сайт на основе PHP, после загрузки его на хост обнаружил ошибку:

Fatal error:  Call to undefined function json_encode() in xxx.php

Код очень прост:

echo json_encode(array(
    'result' => true,
));

Он отправляет JSON клиенту.

Я знаю, что json_encode добавлен после php 5.2, но версия PHP его хоста - PHP 5.1.2, поэтому он сообщает об ошибке.

Но мы не имеем права обновлять версию хоста PHP, поэтому я должен изменить код. Как дать ему вернуть JSON клиенту без json_encode?

На веб-странице в браузере клиента будет выполняться этот код JavaScript, чтобы получить и проверить этот json:

jQuery.ajax({ 'url': '...', ...,
    'success':function(json) {
        if(json != null && json.result == true) {
           // do something
        }
    }
}

Большое спасибо!


UPDATE

Поскольку у меня нет прав что-либо обновлять или устанавливать новые библиотеки на этот хост, единственное, что я могу сделать, это изменить код. Но я почти ничего не знаю о php, что я не знаю, как использовать сторонние библиотеки. Наконец, я исправляю это так:

В php:

echo '{"result":"true"}';

В JavaScript:

if(json!=null && json.result=="true") {
    // do something
}

Ответы [ 8 ]

6 голосов
/ 25 марта 2011

Прежде всего: настоятельно стоит подумать об обновлении, поскольку PHP 5.1.x и 5.2.x больше не поддерживаются. Вы указали, что у вас нет прав на это, но если вы платный клиент, это должно что-то значить. PHP 5.2 устарел с последнего выпуска PHP 5.3.6 .

Пользователь на PHP.net предоставил пользовательскую функцию , которая делает то же самое. Вы можете переименовать его в json_decode() и заключить в выражение if (!function_exists('json_encode')):

if (!function_exists('json_encode')) {
     function json_encode() {
         // do stuff
     }
}
3 голосов
/ 25 марта 2011

У него более старая версия PHP, где отсутствует json_encode. Это можно исправить с помощью различных сторонних библиотек.

  • Мой устаревший проект: http://include -once.org / p / upgradephp / , который обеспечивает вставку json_encode / json_decode, почти идентичную встроенному расширению PHP (странно в отношении в Юникод).
  • Тогда есть https://pear.php.net/package/Services_JSON, который даже добавляет поддержку JSOL (Object Literal - это расширенный набор JSON).
  • А также http://framework.zend.com/manual/en/zend.json.html, который предоставляет класс, обеспечивающий довольно тщательное переопределение. (Вероятно, лучшая протестированная доступная версия.)
1 голос
/ 25 марта 2011

Вы можете использовать стороннюю библиотеку JSON, например, из проекта PEAR (они предоставляют все виды полезных библиотек PHP различного качества):

http://pear.php.net/pepr/pepr-proposal-show.php?id=198

Я уверен, что есть и другие (я бы попробовал поискать в Google библиотеки PHP JSON).

1 голос
/ 25 марта 2011

Существует реализация, которую вы можете использовать , опубликованная в комментариях к документации PHP для json_encode.

0 голосов
/ 25 марта 2011

Мне пришлось на днях установить JSON Libs на мой сервер, попробуйте следующее:

Выполните следующие команды:

  • pecl install json
  • touch /etc/php.d/json.ini
  • echo "extension=json.so" > /etc/php.d/json.ini
  • service httpd restart

Первая установит библиотеки json на ваш компьютер, вторая строка создаст файл json.iniв каталоге php.d и в последней строке добавится строка extension=json.so в файл json.ini.

Надеюсь, это поможет!

0 голосов
/ 25 марта 2011

jsonwrapper реализует функцию json_encode, если она отсутствует, и оставляет ее в покое, если она уже присутствует.Так что он прекрасно совместим с будущим.

0 голосов
/ 25 марта 2011

Прочитайте комментарии для json_encode на http://www.php.net/manual/en/function.json-encode.php, где вы также найдете комментарий, содержащий ручную реализацию для php http://www.php.net/manual/de/function.json-encode.php#100835

Кроме того, есть и другие реализации, доступные через Google.

0 голосов
/ 25 марта 2011

Почему бы не использовать простую json-библиотеку PHP, которую вы можете включить в каждую настройку?

Я погуглил эту одну для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...