Работа с JSON

Часто нужно преобразовывать массивы в 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;
}

 

 

Добавить комментарий


Защитный код
Обновить