Создание и разбор данных формата JSON в PHP

VitaliyRodnenko, 23.12.2008

Логотип JSONВ этой статье я хочу рассказать о текстовом формате обмена данными — JSON, а именно — про работу с этим форматом в PHP.

JSON — компактный текстовый формат данных. Может применяться как в интернет-службах передачи данных, так и для хранения информации в структурированном виде.

Описание JSON из википедии:

JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми.

Несмотря на происхождение от JavaScript (точнее, от подмножества языка стандарта ECMA-262 1999 года), формат считается языконезависимым и может использоваться практически с любым языком программирования. Для многих языков существует готовый код для создания и обработки данных в формате JSON.

Практическая польза использования JSON открывается при использовании технологии AJAX. Формат JSON является более кратким и удобочитаемым по сравнению с XML, является «родным» для Javascript. Кроме того, в JSON-код возможна вставка вполне работоспособных функций.

Да, именно в технологии AJAX, на мой взгляд, его основное применение. Так как технология AJAX подразумевает отправку запроса клиентов на сервер. Далее на сервере запрос обрабатывается, и результат отправляется в ответ клиенту.

Вид данных в формате JSON

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

Приведем пример представления данных в формате JSON:

{"id":"1","name":"ivan","country":"Russia","office":["yandex","management"]}

Давайте разберем, что этой строкой можно передать: человек с именем «ivan», под идентификатором «1», проживающий в стране «Russia» работает в компании «yandex» в отделе «management».

Приведем еще один пример. На сайте имеется форма обратной связи, работающая по технологии AJAX. Посетитель заполняет информацию, далее она отправляется на сервер для проверки, если ошибок не найдено, информация сохраняется в базу данных и отправляется ответ об успешном сохранении. Но если найдены ошибки, то возвращается ответ с типами ошибок.

Пример ответа об ошибке в формате JSON:

{"error":"1","errorcode":["empty_pers","empty_mail","empty_phone","empty_letter","empty_scode"]}

Что, к примеру, означает:

  • Необходимо заполнить поле «Контактное лицо»
  • Необходимо заполнить поле «E-mail»
  • Необходимо заполнить поле «Телефон»
  • Введите текст сообщения
  • Необходимо заполнить поле «Число на картинке»

В случае, если ошибок нет, то возвращается ответ:

{"error":"0"}

Что говорит об успешной отправке данных.

В PHP, для представления данных в формате JSON служит расширение JSON extension. В версиях PHP старше 5.2.0 поддержка JSON встроена в ядро, в более ранних версиях необходимо подключать к вашему скрипту дополнительный файл с функциями.

Итак в PHP, за работу с данными в формате JSON отвечают две функции: json_encode() и json_decode().

Конвертация данных в формат JSON

$json_data = array ('id'=>1,'name'=>"ivan",'country'=>'Russia',"office"=>array("yandex"," management"));
echo json_encode($json_data);

Обратное преобразование данных из формата JSON

$json_string='{"id":1,"name":"ivan","country":"Russia","office":["yandex"," management"]} ';
$obj=json_decode($json_string);

Теперь в $obj будут содержаться JSON данные переведенные в PHP-объект, доступ к которым вы сможете получить следующим образом:

echo $obj->name; //Отобразит имя ivan
echo $obj->office[0]; //Отобразит компанию yandex

Как видите, $obj->office является массивом.

foreach($obj->office as $val)
  echo $val;

Работа с JSON позволяет обмениваться с сервером данными в «чистом виде». Полностью отпадает необходимость пересылать громоздкие куски HTML кода.

Подписаться на обновления блога

Вам понравился наш блог, хотите следить за обновлениями? Подпишитесь на RSS рассылку или рассылку по электронной почте. Так же вы можете следить за нами в Twitter.

Категории: PHP | Комментировать

Комментарии (13)

  1. Ney / 23.12.2008 в 12:26

    Для PHP ещё есть класс для работы с JSON
    http://mike.teczno.com/JSON/doc/

  2. Englishelp / 09.07.2009 в 21:54

    Отличная статья, кратко и ёмко :) Как раз искал как работать с JSON из PHP. Спасибо!

  3. Никита / 03.09.2009 в 18:22

    Хочу заметить одну тонкость при работе с IE и генераций JSON.

    Когда мы перебираем список, код получается примерно такой (Python):

    a = ""
    for x in list: a += '"%s",' % x

    в итоге строка приобретает вид «empty_pers»,»empty_mail»,»empty_scode», с запятой на конце и JSON:

    {"error":"1","errorcode":["empty_pers","empty_mail","empty_scode",]}

    Opera и Firefox схавают, а для IE это будет ошибкой синтаксиса, и последний раз я не смог найти отладчика, который об этом сообщил бы.

    Поэтому надо следить, чтобы не было последней запятой, валидный JSON будет выглядеть так:

    {"error":"1","errorcode":["empty_pers","empty_mail","empty_scode"]}
  4. Алексей / 27.11.2009 в 16:01

    Я Python не знаю, а в PHP есть функция implode(), которая из массива делает строку без финального разделителя

  5. Александр / 03.03.2010 в 15:42

    А как быть с русским текстом? функция json_encode() вместо него ставит «:»

  6. dasha / 07.04.2010 в 14:31

    а если значение поля — это еще один json объект?
    пример:
    {free: {cost: 0, describe: «free profile»}, up: {cost: 20, describe: «better»}}
    а если имя поля — это число (id например)
    пример:
    {1: «free», 2:»up» }
    как тогда с ним работать?
    в общем
    приезжает мне вот такой json:
    {1:{title:»free», cost: «0″, describe: «long string»}, 2: {title:»up», cost: «20″, describe: «long string»}}
    json_encode не выдает никакой ошибки, но получить данные не получается
    я в php молодо-зелено, задачка совершенно случайно попала

  7. Алексей / 07.04.2010 в 21:17

    А что конкретно у вас возвращает json_encode()?

  8. dasha / 07.04.2010 в 21:45

    уже разобралась )
    я, избалованная JSом, была уверена, что по спецификации не надо обрамлять кавычками имена полей
    вот тут то оно и отваливалось, возвращая null
    подкорректировали ответ от сервера, дабы валидный json приезжал и все заработало
    спасибо большое

  9. Lopar / 31.08.2010 в 13:37

    Делаю всё точно по тутору. На месте вывода результата из json-строки (echo $user->name;) имею ошибку: Notice: Trying to get property of non-object in D:\UsbWebserver\Root\ttz\jnfo.php on line 18

    18 строка указана в скобках.

  10. Lopar / 31.08.2010 в 14:32

    Нашел. UTF-8 + DOM = EVIL!!!

  11. Васлилий / 22.07.2011 в 00:57

    Ребята, вот эта вот функция json_decode… не безопаснее ли ручками сделать?

  12. Machine / 10.10.2011 в 17:58

    >> не безопаснее ли ручками сделать?

    нет, зачем велосипед изобретать…

  13. Николай / 28.08.2015 в 23:57

    Мой сайт работает с использованием этого метода. Все данные храню в текстовом файле (dat) и имеет уже более 1500 строк!

Оставить комментарий

480×60
480×60