Парсинг JSON на PHP

mras..ad

Гуру форума
Регистрация
8 Фев 2013
Сообщения
115
Реакции
91
Есть код:

Код:
$url = file_get_contents("http://test.site/api/json.php");
$content = json_decode($url, true);
print_r($content);

Array ( [status] => ok [source] => cache [data] => Array ( [events] => Array ( [0] => Array ( [id] => 927396 [operationDateTime] => 05.02.2015 15:11:00 [operationAttribute] => Единичный
{"status":"ok","source":"cache","data":{"events":[{"id":"927396","operationDateTime":"05.02.2015 15:11:00","operationAttribute":"\u0415\u0434\u0438\u043d\u0438\u0447\u043d\u044b

это кусочек из JSON

мне нужно чтобы выводимые дынные не искажались после декодирования, съедаются кавычки и выводятся название переменных.
мне нужно просто получить второй вариант только декодированный.

что делаю не так? подскажите пожалуйста
 
Вполне валидный декод, в чём вы усматриваете искажение?
Попробуйте var_export вместо print_r
 
Вполне валидный декод, в чём вы усматриваете искажение?
Попробуйте var_export вместо print_r

При использовании var_export пустота, но не в нем суть, скорее всего код валидный, просто посмотрите на пример ниже в валидаторе, там выводит код как есть, скорее всего формат вывода чистый потому что он декодирует его на java script'e в ajax json.

Для просмотра ссылки Войди или Зарегистрируйся

что скажете? на php можно вывести такой же "чистый" код? или по сути нет никакой разницы? просто смущает дополнительный "мусор" вокруг переменных.
 
json_decode принимает валидный json код и преобразует его в массив на PHP, с которым в дальнейшем можно работать в циклах или через переменные, типа такого:
PHP:
echo $content['events'][0]['operationAttribute'];
То что отдаёт Для просмотра ссылки Войди или Зарегистрируйся это тот же самый json, но только отформатированный отступами и с преобразованными национальными utf8 символами из заэскейпленных \u.

А как говорят в Одессе, - это две большие разницы ;)

И такая \u кодировка это, пусть и не обязательная, но рекомендация стандарта:
JSON: Исходные данные JSON всегда должны быть закодированы в UTF-8, и желательно в ASCII с экранированными символами \u для всех отличных от ASCII символов. Для входных данных, может быть также рассмотрена поддержка UTF-16 и UTF-32. Спецификация JSON не позволяет любых других кодировок.
Для просмотра ссылки Войди или Зарегистрируйся

Ну в общем одной стандартной функцией такого преобразования не сделаешь надо конвертер писать с рекурсивным обходом массива, ну и вид от Для просмотра ссылки Войди или Зарегистрируйся это чисто для людей, браузеры могут такого кода не понять...
 
json_decode принимает валидный json код и преобразует его в массив на PHP, с которым в дальнейшем можно работать в циклах или через переменные, типа такого:
PHP:
echo $content['events'][0]['operationAttribute'];
То что отдаёт Для просмотра ссылки Войди или Зарегистрируйся это тот же самый json, но только отформатированный отступами и с преобразованными национальными utf8 символами из заэскейпленных \u.

А как говорят в Одессе, - это две большие разницы ;)

И такая \u кодировка это, пусть и не обязательная, но рекомендация стандарта:

Для просмотра ссылки Войди или Зарегистрируйся

Ну в общем одной стандартной функцией такого преобразования не сделаешь надо конвертер писать с рекурсивным обходом массива, ну и вид от Для просмотра ссылки Войди или Зарегистрируйся это чисто для людей, браузеры могут такого кода не понять...

Спасибо большое что разъяснили, где то уже встречал в сети на форумах там приводили куски кода и разкодировку \u.. для каждого символа алфавита и каких то особенных знаков, но это уже отдельная тема.

Задам еще пару вопросов по теме и хорошего понемножку.

В примере был виден какой приходит результат кода, как более правильно его стилизировать, чтобы в итоге сделать свою формочку в которю можно вбить трек нажать кнопку и выползет <table ...> с дивами.

Главное направить, пока что понял что нужно делать так:
$attribute = $content[data][events][0][operationAttribute];

потом вставлять "$attribute" в нужное место и окружить его дивами, табличкой и присвоить всему этому стили.

то есть нужно каждому значению присвоить данные из json и потом вызывать в нужных местах?

это правильно или есть что то проще, "правильней"?

еще если нужно больше углубиться в дерево, то:
echo $content['events'][0]['operationAttribute'][0]['test'][0]['test'][0]['test'][0]['test'][0];?

[0] - это без ограничений?

в php начинающий совсем))) :):dk:
 
еще если нужно больше углубиться в дерево, то:
echo $content['events'][0]['operationAttribute'][0]['test'][0]['test'][0]['test'][0]['test'][0];?
Если есть вот такой массив $content, например
DtaIOV3N.png


обратиться можно так
$content['0']['extension_id'] - выведет 23
$content['0']['type'] - выведет payment
$content['0']['code'] - выведет cod

$content['1']['extension'] - выведет 461
$content['1']['type'] - выведет payment
$content['1']['code'] - выведет robokassa

Если вложенность элементов глубже, то добавляются еще элементы $content['events'][0]['operationAttribute'][0]['test'][0]['test'][0]['test'][0]['test'][0] напрмер так.

Скорее всего вам нужно обходить все элементы массива. Для этого используется функция Для просмотра ссылки Войди или Зарегистрируйся
 
Если есть вот такой массив $content, например
DtaIOV3N.png


обратиться можно так
$content['0']['extension_id'] - выведет 23
$content['0']['type'] - выведет payment
$content['0']['code'] - выведет cod

$content['1']['extension'] - выведет 461
$content['1']['type'] - выведет payment
$content['1']['code'] - выведет robokassa

Если вложенность элементов глубже, то добавляются еще элементы $content['events'][0]['operationAttribute'][0]['test'][0]['test'][0]['test'][0]['test'][0] напрмер так.

Скорее всего вам нужно обходить все элементы массива. Для этого используется функция Для просмотра ссылки Войди или Зарегистрируйся

Как разжевать и в рот положить, спасибо большое, буду познавать дальше)
 
Назад
Сверху