Впервые я узнал о формате json, когда стал работать с API вконтакте. Это оказался формат обмена данными, который изначально был создан для языка JavaScript. По этому и расшифровка у этого формата следующая: JavaScript Object Notation. Тем не менее, нашлось применение этому формату во многих языках программирования, в том числе и в php.
Строка json выглядит примерно так:
["1":"yellow";"2":"green";"3":"grey"]
Как вы видите, имя и значение находятся в двойных кавычках, нет никаких пробелов. Эту строку можно будет использовать для передачи данных в методе GET, если позволит длина строки.
Структура передаваемого массива может быть многоуровневой. Что бы создавать подобные строки и декодировать их, в php есть специальный набор функций json.
Запомните, эти функции работает только с UTF-8.
Функция json_encode в php
Функция json_encode способна преобразовать в формат json переменную, массив или объект.
<?php
$msv = array('x1' => 10, 'x2' => 20, 'x3' => 30);
$jmsv= json_encode($msv);
//Содержимое $jmsv после выполнения этого куска кода:
//{"x1":10,"x2":20,"x3":30}
?>
В данном примере массив был преобразован в строку json.
Функция json_decode в php
Функция json_decode служит для расшифровки полученной строки. В результате работы функции мы можем получить массив или объект, в зависимости от выбранного параметра.
Функция имеет несколько параметров. Первый является обязательным - это и есть строка, которую мы должны расшифровать. Второй параметр можно не указывать, тогда получим объект, а если указать - получим массив. На примере разберетесь.
<?php
$jmsv = '{"x1":10,"x2":20,"x3":30}';
$outcls=json_decode($json);
$outmsv=json_decode($json, true);
В результате получаем класс $outcls и массив $outmsv.
?>
Получение данных из класса:
<?php
echo $outcls->{'x1'};
?>
Получение данных из массива:
<?php
echo $outmsv['x1'];
?>
Функция json_last_error в php
Функция не имеет параметров. Возвращает значение, которое поможет понять причину возникновения ошибки:
JSON_ERROR_NONE Ошибок нет
JSON_ERROR_SYNTAX Синтаксическая ошибка
JSON_ERROR_UTF8 Некорректные символы UTF-8, возможно неверная кодировка