Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: json_decode возвращает NULL
Форумы портала PHP.SU » » Если скрипт не работает » json_decode возвращает NULL

Страниц (1): [1]
 

1. lamozavrik - 25 Июня, 2012 - 13:20:33 - перейти к сообщению
Привет всем! Помогите разобраться пожалуйста...
С javascript'а приходит такая строка в формате JSON:
Цитата:
{"return_date_creation":"2012-06-25 13-17-56","package_id":"48","barcode":"PC120000489DE","return_cost":"295.00","reason_id":"3","docs":[null,1,1,1,1,1],"crm":0,"comment":"","customer_id":"258"}

Прогоняю её через json_decode(), но он мне возвращает NULL.
Через echo строка выводится. Если в наглую эту же строку пропишу в скрипте, то тогда все норм...
В чем может быть проблема?
2. EuGen - 25 Июня, 2012 - 13:27:45 - перейти к сообщению
Достаточно странно:
PHP:
скопировать код в буфер обмена
  1. var_dump(json_decode('{"return_date_creation":"2012-06-25 13-17-56","package_id":"48","barcode":"PC120000489DE","return_cost":"295.00","reason_id":"3","docs":[null,1,1,1,1,1],"crm":0,"comment":"","customer_id":"258"}'));

:
CODE (htmlphp):
скопировать код в буфер обмена
  1. object(stdClass)#1 (9) {
  2.  ["return_date_creation"]=>
  3.   string(19) "2012-06-25 13-17-56"
  4.   ["package_id"]=>
  5.   string(2) "48"
  6.   ["barcode"]=>
  7.   string(13) "PC120000489DE"
  8.   ["return_cost"]=>
  9.   string(6) "295.00"
  10.   ["reason_id"]=>
  11.   string(1) "3"
  12.   ["docs"]=>
  13.   array(6) {
  14.     [0]=>
  15.     NULL
  16.     [1]=>
  17.     int(1)
  18.     [2]=>
  19.     int(1)
  20.     [3]=>
  21.     int(1)
  22.     [4]=>
  23.     int(1)
  24.     [5]=>
  25.     int(1)
  26.   }
  27.   ["crm"]=>
  28.   int(0)
  29.   ["comment"]=>
  30.   string(0) ""
  31.   ["customer_id"]=>
  32.   string(3) "258"
  33. }

Да и строка выглядит корректной. Возможно, Вы не все учитываете? Приведите код, в котором происходит обработка.
3. lamozavrik - 25 Июня, 2012 - 13:30:39 - перейти к сообщению
EuGen, в том то и дело, что если я эту строку так как Вы
Цитата:
var_dump(json_decode('{"return_date_creation":"2012-06-25 13-17-56","package_id":"48","barcode":"PC120000489DE","return_cost":"295.00","reason_id":"3","docs":[null,1,1,1,1,1],"crm":0,"comment":"","customer_id":"258"}'));
, то все норм, выводится тоже, что и у Вас, а если я делаю так
, то мне возвращает NULL

$this->request->post['return'] - тоже, что и $_POST['return'];
4. Viper - 25 Июня, 2012 - 13:33:50 - перейти к сообщению
lamozavrik а где вы элемент массива return видите?
5. EuGen - 25 Июня, 2012 - 13:34:58 - перейти к сообщению
Значит, не одно и то же.
Посмотрите var_dump($this->request->post['return']) - отладка стандартна.
6. lamozavrik - 25 Июня, 2012 - 13:35:02 - перейти к сообщению
Viper, эта строка - это echo $this->request->post['return'];
(Добавление)
EuGen пишет:
Посмотрите var_dump($this->request->post['return']) - отладка стандартна.

string(352) "{"return_date_creation":"2012-06-25 13-23-15","package_id":"48","barcode":"PC120000489DE","return_cost":"295.00","reason_id":"3","docs":[10,1,1,1,1,1],"crm":0,"comment":"","customer_id":"258"}"
7. Viper - 25 Июня, 2012 - 13:43:55 - перейти к сообщению
lamozavrik У вас случайно никаким фильтром не обрабатывается? Что будет если нативно $_POST['return'] использовать?
8. lamozavrik - 25 Июня, 2012 - 13:44:30 - перейти к сообщению
Viper, пробовал... тоже самое (
9. Мелкий - 25 Июня, 2012 - 13:47:15 - перейти к сообщению
lamozavrik пишет:
string(352)

А данные - 192 символа.
См. чистые данные, если смотрите в браузере - то исходный текст страницы.
10. lamozavrik - 25 Июня, 2012 - 13:53:52 - перейти к сообщению
Мелкий, вот спасибо! )) Там действительно почему то вместо двойных кавычек приходили " . Никто не подскажет почему? )
11. Мелкий - 25 Июня, 2012 - 14:05:35 - перейти к сообщению
lamozavrik, разбирайте код, который отправляет запрос, может там кодируется. И, вдобавок, нигде ли не фильтруются все данные без исключения уже на серверной стороне.
Явно виден какой-то фреймворк, сам же php таким не занимается.
12. lamozavrik - 25 Июня, 2012 - 14:14:39 - перейти к сообщению
Мелкий, это CMS opencart, но такое даже тогда, когда напрямую делать $_POST;
(Добавление)
Мелкий, Вы были правы, они на входе фильтруют глобальные массивы с помощью htmlspecialchars($data, ENT_COMPAT) и потом перезаписываю его уже отфильтрованным ))) Спасибо еще раз )

 

Powered by ExBB FM 1.0 RC1