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 строки.
Добавить комментарий