Работа с JSON
- Подробности
- Категория: PHP
- Просмотров: 112
Часто нужно преобразовывать массивы в json и обратно...
Например, частенько массив легче сохранить в json для базы данных.
Напомню, что json - это объектная нотация javaScript.
Работа с JSON в PHP достаточно проста, давайте рассмотрим на примерах:
1) json_encode($value, $options) – кодирует массив или объект в JSON.
$array = array(
'1' => 'Альфа',
'2' => 'Бета',
'3' => 'Гамма',
'4' => 'Дельта'
);
$json = json_encode($array);
echo $json;
Как результат:
{"1":"\u0410\u043b\u044c\u0444\u0430","2":"\u0411\u0435\u0442\u0430","3":"\u0413\u0430\u043c\u043c\u0430","4":"\u0414\u0435\u043b\u044c\u0442\u0430"}
Как видим кириллические символы преобразовались в какие-то знаки...так что давайте воспользуемся дополнительным параметром:
$json = json_encode($array);
echo $json;
Как результат:
{"1":"Альфа","2":"Бета","3":"Гамма","4":"Дельта"}
Далее с такой строкой уже можно легко работать в Ajax или подать в приложение.
2) json_decode($json) - обратно преобразует json в массив, такое часто делают на сайтах
Давайте вышеполученный json преобразуем обратно в массив:
$arr = json_decode($json);
print_r($arr);
Результат:
stdClass Object(
'1' => 'Альфа',
'2' => 'Бета',
'3' => 'Гамма',
'4' => 'Дельта'
);
$json = json_encode($array);
echo $json;
с stdClass Object работать сложнее, поэтому получим опять массив, просто добавив вторым параметром, true
$arr = json_decode($json, true);
print_r($arr);
Результат:
stdClass Object(
'1' => 'Альфа',
'2' => 'Бета',
'3' => 'Гамма',
'4' => 'Дельта'
);
$json = json_encode($array);
echo $json;
Отлов ошибок преобразований
Для этого применяется функция json_last_error(), которая возвращает последнюю ошибку от json-преобразований:
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo 'Ошибок нет';
break;
case JSON_ERROR_DEPTH:
echo 'Достигнута максимальная глубина стека';
break;
case JSON_ERROR_STATE_MISMATCH:
echo 'Некорректные разряды или несоответствие режимов';
break;
case JSON_ERROR_CTRL_CHAR:
echo 'Некорректный управляющий символ';
break;
case JSON_ERROR_SYNTAX:
echo 'Синтаксическая ошибка, некорректный JSON';
break;
case JSON_ERROR_UTF8:
echo 'Некорректные символы UTF-8, возможно неверно закодирован';
break;
default:
echo 'Неизвестная ошибка';
break;
}