json_decode PHP
Введение | |
Простейший JSON | |
JSON с одним вложением | |
JSON с массивом | |
Реальный пример работы с API | |
Похожие статьи |
Введение
Попробуем разобраться с обработкой JSON средствами PHP
Простейший JSON
Предположим, что у нас есть следующий JSON
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
Cделаем json_decode() без дополнительных параметров
var_dump(json_decode($json));
object(stdClass)#4 (5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5) }
В этом случае json_decode() возвращает object
Теперь выполним json_decode() с аргументом true
var_dump(json_decode($json, true));
array(5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5) }
Теперь мы получили array
Зафиксируем, что в первом случае (без аргументов) var_dump возвращает объект а во втором (с аргументом true) массив
Подробнее о том как выводить содержимое массива читайте
здесь
$json_decode = json_decode($json);
$json_decode_true = json_decode($json,true);
$arraydata = implode(',' , $json_decode_true);
echo $arraydata;
1,2,3,4,5
Попробуем вытащить из массива отдельные элементы
echo $json_decode_true["a"];
echo'<br>;
echo $json_decode_true["b"];
1
4
JSON с вложением
Усложним задачу. Пусть теперь JSON содержит вложения второго уровня.
$json2 = '
{
"a": {"a_item_1": 11, "a_item_2": 12, "a_item_3": 13},
"b": 2,
"c": 3,
"d": {"d_item_1": 41, "d_item_2": 42, "d_item_3": 43},
"e": 5
}'
;
Попробуем достать один из вложенных элементов.
Обычные элементы (b, c, e) можно вывести на экран
с помощью echo для элементом, которые сами также являются массивами (a, d) нужно
использовать, например, implode(), подробности
здесь
$json_decode_true2 = json_decode($json2, true);
echo $json_decode_true2["c"];
echo'<br>;
$d = $json_decode_true2["d"];
$dvalue = implode( , $d);
echo $dvalue;
echo'<br>;
echo $json_decode_true2["d"]["d_item_2"];
3
41,42,43
42
Как Вы можете видеть, обычные элементы по-прежнему доступны. Новые элементы возвращают Array если обратиться к верхнему уровню, либо значение, если обратиться к элементу массива.
JSON с массивом
Массивы заключены в квадратные скобки. Предположим, что он довольно простой.
{
"a": [{
"a_item_1": 11,
"a_item_2": 12,
"a_item_3": 13
},
{
"a_item_4": 14,
"a_item_5": 15,
"a_item_6": 16
}
],
"b": 2,
"c": 3,
"d": {
"d_item_1": 41,
"d_item_2": 42,
"d_item_3": 43
},
"e": 5
}
Чтобы обратиться к элементу массива нужно сперва указать его индекс в квадратных скобках.
Достанем элементы a_item_3 и a_item_6 , обратите внимание на то, что они находятся в разных частях вложенного массива a
Ожидаем получить 13 и 16
$json_decode_true3 = json_decode($json3, true);
echo $json_decode_true3["a"][0]["a_item_3"];
echo <br>;
echo $json_decode_true3["a"][1]["a_item_6"];
13
16
Реальный пример
Пример работы с реальным API вы можете изучить в статье «Обработка ответа реального запроса к API»