Декодируем JSON данные с помощью json_decode() в PHP. Часть 2

Декодируем JSON данные с помощью json_decode() в PHP. Часть 2

json_decode - функция PHP, позволяющая преобразовать JSON строку в переменную PHP, которая по умолчанию будет являться объектом. Для корректной работы функции кодировка JSON строки должна быть в UTF-8.

Синтаксис: json_decode (string, [assoc, depth, options]);

Обязательным является только первый параметр:

string - json строка, которую будем декодировать
assoc - по умолчанию преобразует все в объект, но если поставить TRUE, то в ассоциативные массивы
depth - глубину рекурсии
options - битовая маска опций декодирования

Строка JSON содержит объекты или/и массивы.

  • Массив заключается в квадратные скобки [ ] и содержит разделенный запятой список значений.
  • Объект заключается в фигурные скобки { } и содержит разделенный запятой список пар имя/значение.
  • Пара имя/значение состоит из имени поля, заключенного в двойные кавычки, за которым следует двоеточие (:) и значение поля (если оно строковое - то также заключается в двойные кавычки).
  • В значении поля одинарные кавычки надо передавать как есть, а двойные экранировать: \"

Примеры json формата (подробнее о них писал здесь):

{"no_otvet":"\"Кавычки\" и 'одинарные'", "email":"0", "phone":"0", "poshta":"0"}
["\/administrator\/components\/com_quest\/data\/file\/1499389843_595.jpg", "Пейзаж"]

Значение в массиве или объекте может быть:

- Числом (целым или с плавающей точкой)
- Другим массивом (заключенным в квадратные скобки)
- Другой объект (заключенный в фигурные скобки)
- Строкой (в двойных кавычках)
- Логическим значением (true или false)
- Значение null

Примеры

1. Простая расшифровка JSON и доступ к его свойствам:

$json = '{"id":100,"gorod":"Moscow","country":"Russia","phone":["ZTE"," Blade"]}';
$obj = json_decode($json);
var_dump($obj);

Результат:

Теперь, чтобы обратиться к свойству country, достаточно прописать: echo $obj->country;  А чтобы вытащить значение телефона в массиве phone - обратиться так: echo $obj->phone[0].$obj->phone[1]; Думаю принцип понятен.

Но если вам понадобится вытащить из pone все значения (например, если неизвестна длина массива), то используйте цикл:

foreach ($obj->phone as $key => $values) { //выводит из array все значения и свойства 1-го массива
echo "$key: $values <br>"; }

2. Более сложный JSON - получаем его данные.

$json = '{
"string": "Пример строки",
"numeric": 100,
"boolean": true,
"null": null,
"array": [
{
"field_1": "Первое свойство первого элемента",
"field_2": 100,
"field_3": true
},
{
"field_1": "Первое свойство второго элемента",
"field_2": 200,
"field_3": true
}
],
"object": {
"name": "Пример свойства объекта"
}
}';

Теперь получим данные json

$obj = json_decode($json);
//var_dump($obj); //структура json
echo $obj->string.'<br>'; //Пример строки
echo $obj->array[1]->field_2.'<br>'; //200
echo $obj->object->name.'<br>'; //Пример свойства объекта

foreach ($obj->array[0] as $key => $values ) { //выводит из array все значения и свойства 1-го массива
echo "$key: $values <br>"; }
echo "<br>";

Также можно унифицировать расшифровку всех свойств циклом (выводит все значения данного JSON. Применительно только к этому примеру, так как структура может содержать подобъекты или подмассивы, на которые также надо будет делать проверки):

foreach ($obj as $field => $value) {

//если скалярное значение
if (is_scalar($value) or is_null($value)){
echo $field . ' - ' . $value . '</br>';
}

//если массив
if (is_array($value)){
for ($i = 0; $i < count($value); $i++) {
//а в нем у нас объекты
foreach ($value[$i] as $field_ob => $value_ob) {
echo $field . ' -> ' . $field_ob . ' -> ' . $value_ob . '</br>';
} } }

//если другой объект
if (is_object($value)){
foreach ($value as $field_ob => $value_ob) {
echo $field . ' -> ' . $field_ob . ' -> ' . $value_ob . '</br>';
} }

}

Результат:

Как вы видите foreach очень может пригодиться при работе с JSON форматом, если он сложный. В следующем уроке рассмотрим способы генерирования JSON строки.

 

| | Декодируем JSON данные с помощью json_decode() в PHP. Часть 2 | json_decode - функция PHP, позволяющая преобразовать JSON строку в переменную PHP, которая по умолчанию будет являться объектом. Для корректной работы |