Очень часто при написании скриптов мы сталкиваемся с использованием формата JSON
и регулярно наши клиенты спрашивают как работать с JSON в скриптах
Human Emulator.

В связи с этим мы решили написать вводную статью на эту тему.

Работа с JSON в скриптах XHE полностью аналогична работе с JSON в PHP. Более подробно про
работу с JSON вы можете найти в разделе «литература».

JSON (JavaScript Object Notation) — текстовый формат обмена данных, основанный
на подмножестве JavaScript.

Как и многие другие текстовые форматы, JSON легко читается и пишется вручную людьми.

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

За счёт своей лаконичности по сравнению с XML, формат JSON может быть более
подходящим для сериализации сложных структур.

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

JSON — текст представляет собой (в закодированном виде) одну из двух структур:
* Набор пар «ключ: значение». В PHP это реализовано как ассоциативный массив (array).
Ключом может быть строка, а значением — любой поддерживаемый тип.

Упорядоченный набор значений. В PHP это реализовано как простой массив (array).

Базовые типы JSON:

* «Число» — десятичное число (не делает никакого различия между целыми и числами
с плавающей точкой). Не поддерживается NaN (не-число, Not A Number).

* «Строка» — упорядоченное множество из нуля или более символов юникода, заключённое в
двойные кавычки.

* «Булев» (boolean) — значения либо true, либо false.

* «Массив» — упорядоченнное множество значений, каждое из которых может быть
любого поддерживаемого типа. Массив заключается в квадратные скобки «[]».
Значения разделяются запятыми.

* «Объект» — неупорядоченное множество пар «ключ: значение», заключённое в фигурные
скобки «{}». «Ключ» описывается «строкой», между ним и значением стоит символ «:».
Пары «ключ-значение» отделяются друг от друга запятыми.

* «null» — пустое значение означающее «ничего».

JSON не поддерживает и не разрешает любой вид комментариев, но комментарии
можно эмулировать, например, создав объект с ключом «comment» и в
значении вписать комментарий.

Следующий пример показывает JSON-представление объекта, описывающего человека.
В объекте есть строковые поля имени и фамилии, объект, описывающий адрес,
и массив, содержащий список телефонов:

Предположим, у нас стоит задача вытянуть какие-то данные из веб-сайта и
сохранить их в виде JSON. Для примера, спарсим данные компаний занимающихся
фрахтовкой яхт с сайта yellowpagesrussia.ru
(только первую страницу).

Наш JSON будет следующего формата:

Алгоритм работы нашего скрипта будет такой:

1. открываем страницу сайта

2. получаем информацию со страницы (строку)

3. сконвертируем (используя разделитель «\r\n \r\n») полученную строку в массив строк

4. создадим пустой массив, в который будем добавлять массивы с подготовленной информацией.
Затем этот массив будем энкодить в json-строку.

5. в цикле пройдёмся по всем эл-ам массива (который получили в 3-м пункте).

На каждой итерации цикла будем:

5.1. подготавливаем подмассив с нужной информацией (для добавления (но не добавляем) его в массив созданный в 4-м пунке).

5.2. проверяем существует ли файл result.json.

5.2.1. если существует, то считываем его и пытаемся декодировать из json-строки в массив.

5.2.2. если декодировать неудалось, то сохраняем его (на всякий случай) и вместо него создаём новый (пустой, естественно).

5.2.3. если декодировать удалось, то просто добавляем к массиву (п. 4) наш подмассив (п. 5.1).

5.3. энкодим наш, теперь уже, заполненный массив (из п. 4) в json-строку.

5.4. записываем в файл нашу json-строку.

После декодинга из json-строки в массив — кодировка строковых данных — «UTF-8».
Если внутри php-файла кодировка другая, то нужно использовать функцию iconv для перекодировки.

Перед энкодингом массива в json-строку все строковые ел-ты массива нужно перекодировать в
кодировку «UTF-8».

PHP функции json_encode(), json_decode() гарантируют сохранность данных только при использовании
кодировки «UTF-8».

Примеры из скрипта:

Здесь мы формируем ассоциативный массив и все строковые эл-ты перекодируем в UTF-8:

Подготовка для энкодинга (добавляем в существующий массив подготовленную информацию):

Энкодим массив в json-строку:

Подробнее о константах для функции json_encode см. здесь json.constants

Записываем полученную строку в файл:

Всё, мы закодировали наш массив в json-строку, которую затем записали в файл.
Теперь, чтобы его декодировтаь нужно:
Считать файл:

Декодировать из json-строки в массив.
Если у нас был валидный json-файл, то будет возвращён массив, иначе возвращается булев тип false.
Второй эл-нт указывает ф-ции, что декодировать нужно в массив, а не в PHP-объект:


Исходники скриптов


Использованная литература и источники:

Википедия

Wikipedia

json.org

php.net

habrahabr.ru

Скрипты написаны в XHE 4.6.45 MT.

скачать скрипт

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

*
*

3 − 2 =

Required fields are marked *