сегодня мне пришлось столкнуться с каким-то странным поведением php json_encode () , о котором я нигде не читал.
Короче говоря:
- Извлечение строки из базы данных
- Создание stdClass -объекта и хранение там некоторых данных
Кодирование с использованием json_encode ()
$obj = new stdClass();
$obj->a = "foo";
$obj->b = "bar";
$obj->c = "doo";
$obj->d = "baa";
json_encode( $obj );
Проблема:
Возвращенный JSON содержит ошибку: вторая (последняя, но только эта!) Переменная была объединена со строковым значением предыдущего.
Например, это выглядело так:
{"a": "foo", "b": "bar", "c": "doo', 'd': 'baa"}
^-------^
Конечно, у меня есть var_dumped () объект, который я передаю json_encode () ... ничего! Все было хорошо и именно так, как и ожидалось. Все переменные были правильными, а все значения были строками.
Но хорошо, этого недостаточно. Поэкспериментировав с этим, я обнаружил, что изменение порядка хранения значений в объекте решило проблему:
$obj->d = "baa";
$obj->c = "doo";
Не выдал ошибку.
Пока я просто изменил порядок столбцов таблицы базы данных. Но я хотел бы знать, откуда эта невидимая ошибка, и в конечном итоге сообщить о ней.
Ошибка появилась только на виртуальной машине Debian с PHP 5.3.6. Другая виртуальная машина, работающая на PHP 5.3.3, выдает правильный JSON, как и встроенный веб-сервер Mac OS X Lion, работающий на PHP 5.3.8.
Мой вопрос
Кто-нибудь тоже сталкивался с этой проблемой?
Привет из Германии!
Оригинальный код
$obj = new stdClass();
$obj->Id = '35';
$obj->EventsCategories_Id = '8';
$obj->Name = 'Blubber';
$obj->OrderValue = '2';
var_dump($obj);
json_encode($obj);