JSON основы использования

Содержание

Примеры использования JSON-формата на PHP и JavaScript

Что такое JSON

JSON — это текстовый формат записи данных. Он позволяет в текстовом виде представить как отдельное число или строку, так и сложные структуры, например, массивы с данными. Использование этого формата записи удобно тем, что он читабелен и интуитивно понятен, в то же время позволяет сохранять очень сложные структуры данных. Кроме того, он более компактный, чем xml, поэтому на мой взгляд более предпочтителен для обмена данными между веб-браузером и сервером.

Синтаксис JSON на примерах

Формат json обычно записывается в 2-х вариантах:

1. Последовательность значений. Например, последовательность 10, 15 и «test» в формате JSON будут выглядеть так:

2. Запись в виде пар ключ : значение . Например:

Немного более сложный пример:

PHP функции для работы с JSON-форматом

В языке php начиная с версии 5.2. есть всего 4 функции:

  • json_decode — Декодирует строку JSON (из строки json-формата получает данные)
  • json_encode — Возвращает JSON-представление данных (преобразует данные в json-строку)
  • json_last_error_msg — Возвращает строку с сообщением об ошибке последнего вызова json_encode() или json_decode()
  • json_last_error — Возвращает последнюю ошибку

В основном по-большей части, используются всего две функции: json_encode и json_decode. Не буду вдаваться в подробности их синтаксиса, подробнее можете посмотреть на php.net. Пример использования:

Обратите внимание : при кодировании в JSON-формат данных на русском языке, функция json_encode преобразует русские символы в юникод, т.е. заменяет их на \uXXXX и таким образом, json-строка становится не читабельной для человека (но понятной для браузера). Если нужно, чтобы преобразования в юникод не происходило (например, при отладке кода), можно просто использовать опцию JSON_UNESCAPED_UNICODE.

Так же, чтобы при кодировании не добавлялись слэши для экранирования и чтобы строки с числами кодировались как числа, можно использовать JSON_UNESCAPED_SLASHES и JSON_NUMERIC_CHECK. В итоге, чтобы json-строка была читабельной для человека, сделаем, например, так:

Без использования этих опций строка была бы такой:

а с использованием опций, получим читабельную строку:

Еще один момент: если нужно чтобы при декодировании json-строки функция json_decode возвращала именно массив, просто добавьте второй параметр в функцию равный true.

На этом рассмотрение php-функций завершу.

JavaScript функции для работы с JSON-форматом

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

Функции JavaScript, используемые для преобразования в JSON-формат и обратно:

  • JSON.parse — декодирование JSON-строки (преобразование строки в объекты и/или массивы)
  • JSON.stringify — возвращает JSON-представление данных (преобразование объектов и/или массивов в json-строку)

Простой пример декодирования json-строки в массив с цифрами:

Пример преобразования (сериализации) объекта в JSON-строку:

При сериализации (преобразовании) объекта в JSON-строку, вызывается метод toJSON этого объекта, если он существует. Если метода нет, тогда перечисляются все свойства объекта. Пример преобразования объекта с методом toJSON:

Обе функции JSON.parse и JSON.stringify имеют доп.параметры для уточнения правил преобразований. Не буду останавливаться на них в рамках этой статьи. Если необходимо, о них можно почитать, например, здесь: https://learn.javascript.ru/json.

Примеры практического применения JSON-формата

Собственно, лично я, применяю формат JSON в 2-х основных ситуациях:

1. Передача данных между браузером и сервером с использованием Ajax-запросов.

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

В JavaScript с помощью jQuery делаем простой ajax-запрос к серверу и выводим данные в виде таблицы в браузер:

На сервере скрипт get-info.php к которому делается ajax-запрос, может быть, например, таким:

В этом примере JSON-строка, которая была передана с сервера в браузер была такой:

Я специально не стал показывать строку в виде «дерева», т.к. она передается именно в таком виде. И как вы можете оценить, запись данных в формате JSON получилась очень компактной, а это значит, что передача этих данных от сервера к браузеру будет практически мгновенной.

2. Запись сложных структур данных в базу данных.

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

Вместо того, чтобы заводить еще одну таблицу ради 2-х настроек, можно просто в таблице со списком пользователей сделать текстовый столбец, в который помещать данные настроек пользователя. Тогда запрос обновления настроек, может например, быть таким:

В будущем, получив из таблицы users информацию, скрипт php может легко превратить их обратно в массив с настройками. Например, если переменная $user_info содержит данные, полученные по пользователю из таблицы users, получить массив с настройками очень просто:

В формате JSON, можно так же, например, записать в базу данных какие опции товаров выбрал покупатель.

Впринципе, можно даже и всё содержимое корзины записать в формате JSON, например, так:

В обычном не древовидном виде эта JSON-строка будет такой:

Таким образом, как видно из примеров, в формате JSON можно хранить и передавать практически любую информацию.

JSON Синтаксис

Синтаксис JSON является подмножеством синтаксиса JavaScript.

JSON синтаксических правил

Синтаксис JSON выводится из JavaScript синтаксиса объекта обозначения:

  • Данные в пар имя / значение
  • Данные разделены запятыми
  • Фигурные скобки держать объекты
  • Квадратные скобки держать массивы

JSON данные — имя и значение

Данные в формате JSON записывается в виде пар имя / значение.

Пара имя / значение состоит из имени поля (в двойных кавычках), за которым следует двоеточие, за которым следует значение:

пример

Имена JSON требуют двойные кавычки. Имена JavaScript нет.

Значения JSON

Значения JSON могут быть:

  • Ряд (целое или с плавающей точкой)
  • Строка (в двойных кавычках)
  • Логическое (истина или ложь)
  • Массив (в квадратных скобках)
  • Объект (в фигурных скобках)
  • ноль

Объекты JSON

Объекты JSON записываются в фигурные скобки.

Так же, как JavaScript, объекты JSON может содержать несколько имя / значений пар:

пример

Массивы JSON

JSON массивы записываются в квадратных скобках.

Так же, как JavaScript, массив JSON может содержать несколько объектов:

пример

В приведенном выше примере объект «employees» представляет собой массив , содержащий три объекта. Каждый объект представляет собой запись человека (с именем и фамилией).

JSON использует JavaScript Синтаксис

Поскольку синтаксис JSON является производным от объекта JavaScript нотации, очень небольшое дополнительное программное обеспечение необходимо для работы с JSON в JavaScript.

С помощью JavaScript вы можете создать массив объектов и назначить на него данные, как это:

пример

Первая запись в массив объектов JavaScript можно получить следующим образом:

пример

Кроме того, можно получить следующим образом:

пример

Данные могут быть изменены следующим образом:

пример

Она также может быть изменена следующим образом:

пример

В следующей главе вы узнаете, как преобразовать текст JSON в объект JavaScript.

Формат JSON, метод toJSON

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

Естественно, такая строка должна включать в себя все важные свойства.

Мы могли бы реализовать преобразование следующим образом:

…Но в процессе разработки добавляются новые свойства, старые свойства переименовываются и удаляются. Обновление такого toString каждый раз может стать проблемой. Мы могли бы попытаться перебрать свойства в нём, но что, если объект сложный, и в его свойствах имеются вложенные объекты? Мы должны были бы осуществить их преобразование тоже.

К счастью, нет необходимости писать код для обработки всего этого. У задачи есть простое решение.

JSON.stringify

JSON (JavaScript Object Notation) – это общий формат для представления значений и объектов. Его описание задокументировано в стандарте RFC 4627. Первоначально он был создан для JavaScript, но многие другие языки также имеют библиотеки, которые могут работать с ним. Таким образом, JSON легко использовать для обмена данными, когда клиент использует JavaScript, а сервер написан на Ruby/PHP/Java или любом другом языке.

JavaScript предоставляет методы:

  • JSON.stringify для преобразования объектов в JSON.
  • JSON.parse для преобразования JSON обратно в объект.

Например, здесь мы преобразуем через JSON.stringify данные студента:

Метод JSON.stringify(student) берёт объект и преобразует его в строку.

Полученная строка json называется JSON-форматированным или сериализованным объектом. Мы можем отправить его по сети или поместить в обычное хранилище данных.

Цукерберг рекомендует:  Вакансии Ticketland.ru МТС

Обратите внимание, что объект в формате JSON имеет несколько важных отличий от объектного литерала:

  • Строки используют двойные кавычки. Никаких одинарных кавычек или обратных кавычек в JSON. Так ‘John’ становится «John» .
  • Имена свойств объекта также заключаются в двойные кавычки. Это обязательно. Так age:30 становится «age»:30 .

JSON.stringify может быть применён и к примитивам.

JSON поддерживает следующие типы данных:

  • Объекты
  • Массивы [ . ]
  • Примитивы:
    • строки,
    • числа,
    • логические значения true/false ,
    • null .

JSON является независимой от языка спецификацией для данных, поэтому JSON.stringify пропускает некоторые специфические свойства объектов JavaScript.

  • Свойства-функции (методы).
  • Символьные свойства.
  • Свойства, содержащие undefined .

Обычно это нормально. Если это не то, чего мы хотим, то скоро мы увидим, как можно настроить этот процесс.

Самое замечательное, что вложенные объекты поддерживаются и конвертируются автоматически.

Важное ограничение: не должно быть циклических ссылок.

Здесь преобразование завершается неудачно из-за циклической ссылки: room.occupiedBy ссылается на meetup , и meetup.place ссылается на room :

Исключаем и преобразуем: replacer

Полный синтаксис JSON.stringify :

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

Если мы передадим ему массив свойств, будут закодированы только эти свойства.

Здесь мы, наверное, слишком строги. Список свойств применяется ко всей структуре объекта. Так что внутри participants – пустые объекты, потому что name нет в списке.

Давайте включим в список все свойства, кроме room.occupiedBy , из-за которого появляется цикличная ссылка:

Теперь всё, кроме occupiedBy , сериализовано. Но список свойств довольно длинный.

К счастью, в качестве replacer мы можем использовать функцию, а не массив.

Функция будет вызываться для каждой пары (key, value) , и она должна возвращать заменённое значение, которое будет использоваться вместо исходного. Или undefined , чтобы пропустить значение.

В нашем случае мы можем вернуть value «как есть» для всего, кроме occupiedBy . Чтобы игнорировать occupiedBy , код ниже возвращает undefined :

Обратите внимание, что функция replacer получает каждую пару ключ/значение, включая вложенные объекты и элементы массива. И она применяется рекурсивно. Значение this внутри replacer – это объект, который содержит текущее свойство.

Первый вызов – особенный. Ему передаётся специальный «объект-обёртка»: <"": meetup>. Другими словами, первая (key, value) пара имеет пустой ключ, а значением является целевой объект в общем. Вот почему первая строка из примера выше будет «:[object Object]» .

Идея состоит в том, чтобы дать как можно больше возможностей replacer – у него есть возможность проанализировать и заменить/пропустить даже весь объект целиком, если это необходимо.

Форматирование: space

Третий аргумент в JSON.stringify(value, replacer, space) – это количество пробелов, используемых для удобного форматирования.

Ранее все JSON-форматированные объекты не имели отступов и лишних пробелов. Это нормально, если мы хотим отправить объект по сети. Аргумент space используется исключительно для вывода в удобочитаемом виде.

Ниже space = 2 указывает JavaScript отображать вложенные объекты в несколько строк с отступом в 2 пробела внутри объекта:

Параметр space применяется для логирования и красивого вывода.

Пользовательский «toJSON»

Как и toString для преобразования строк, объект может предоставлять метод toJSON для преобразования в JSON. JSON.stringify автоматически вызывает его, если он есть.

Как видим, date (1) стал строкой. Это потому, что все объекты типа Date имеют встроенный метод toJSON , который возвращает такую строку.

Теперь давайте добавим собственную реализацию метода toJSON в наш объект room (2) :

Синтаксис JSON

JSON хранит данные в объектах и массивах. Синтаксис JSON отражает как они определяются.

Объекты JSON

Объект JSON — это неупорядоченный набор пар имя/значение, вставленных между фигурных скобок < >.

В следующем примере artistname — это имя, а Deep Purple — его значение.

Объект может содержать ноль или больше пар имя/значение. Несколько пар разделяются запятыми. Вот корректные объекты.

В JSON имя — это строка. Его значением может быть объект, массив, число, строка, true , false или null .

В приведённых выше примерах значения являются строками.

Массивы JSON

Массив JSON — это упорядоченный набор значений, который позволяет хранить список значений. Массив начинается с левой квадратной скобки [ и завершается правой квадратной скобкой ]. Его значения разделяются запятой.

Вот пример массива исполнителей.

Пробелы

Вы можете использовать пробелы, чтобы сделать ваши JSON-документы более читабельными. Фактически это согласуется с большинством (если не всеми) языками программирования.

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

Эти два примера содержат одни и те же данные и простое добавление пробелов на данные никак не влияет.

Однако, если в строке добавить пробел внутри двойных кавычек, то это изменит данные.

Вложенные данные

Большинство JSON-файлов хранят много вложенных данных, что обусловлено их структурой. К примеру, у нас может быть массив исполнителей, его имя — artists , а значение — массив, содержащий сведения о разных исполнителях. У каждого исполнителя может быть свой массив альбомов, каждый с разной парой имя/значение.

Чтобы расширить данный пример возьмём трёх исполнителей.

JavaScript — JSON и методы работы с ним

Урок, в котором рассматривается, что такое JSON и какие он имеет преимущества по сравнению с другими форматами данных.

Понятие JSON

JSON (JavaScript Object Notation) — это текстовый формат представления данных в нотации объекта JavaScript.

Это означает то, что данные в JSON организованы, так же как и в объекте JavaScript. Но в отличие от последнего формат записи JSON имеет некоторые особенности, которые будут рассмотрены немного позже.

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

Структура формата JSON

Кто знаком с процессом создания объектов в JavaScript, не увидит ни чего нового в структуре формата JSON. Это связано с тем, что структура JSON соответствует структуре объекта JavaScript с некоторыми ограничениями.

Более просто представить себе JSON можно как контейнер, состоящий из элементов. Каждый элемент в таком контейнере — это некоторая структурная единица, состоящая из ключа и значения.

При этом значение напрямую связано с ключом и образуют так называемую пару ключ-значение. Для того чтобы получить значение в таком объекте, необходимо знать его ключ. Синтаксически такие данные в JSON записываются следующим образом:

В вышеприведенной записи видно, что ключ отделяется от значения с помощью знака двоеточия ( : ). При этом ключ в объекте JSON обязательно должен быть заключен в двойные кавычки. Это первая особенность JSON, которая его отличает от объекта JavaScript. Т.к. в объекте JavaScript ключ (свойство объекта) не обязательно должен быть заключён в двойные кавычки.

Например, структура объекта, которая является валидной с точки зрения JavaScript и не валидной с точки зрения JSON:

Значение ключа в JSON может быть записано в одном из следующих форматов: string (строкой), number (числом), object (объектом), array (массивом), boolean (логическим значением true или false), null (специальным значением JavaScript).

Это второе ограничение в JSON, т.к. объект JavaScript может содержать любой тип данных, включая функцию.

Для отделения одного элемента (пары ключ-значение) от другого используется знак запятая ( , ).

Например, рассмотрим JSON, состоящий из различных типов данных.

Работа с JSON в JavaScript

В отличие от объекта JavaScript JSON представляет собой строку.

Работа с JSON обычно ведётся в двух направлениях:

  1. Парсинг — это перевод строки, содержащей JSON, в объект JavaScript.
  2. Конвертирование объекта JavaScript в строку JSON. Другими словами, это действие выполняет преобразование обратное парсингу.

Парсинг JSON

Парсинг JSON, т.е. перевод строки JSON в объект JavaScript, осуществляется с помощью метода eval() или parse() .

Использование метода eval():

Использование метода JSON.parse():

Конвертирование объекта JavaScript в строку JSON

Перевод объекта JavaScript в строку JSON осуществляется с помощью метода JSON.stringify() . Данный метод осуществляет действие обратное методу JSON.parse() .

Преимущества формата JSON

Формат представления данных JSON имеет следующие преимущества:

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

Из-за того что данный формат имеет очень много преимуществ он стал применяться не только в JavaScript, но и во многих других языках, таких как C, Ruby, Perl, Python, PHP и т.д.

Сравнение форматов JSON и XML

Формат JSON имеет следующие преимущества перед форматом XML:

  1. При передаче некоторых данных размер JSON будет значительно меньше, чем размер XML.
  2. JSON имеет более удобные методы конвертации в структуры данных JavaScript, чем XML.
  3. JSON более просто создавать, чем XML.

Работа с данными JSON после парсинга

Работа с данными JSON после парсинга осуществляется как с объектом JavaScript.

Рассмотрим основные моменты:

Для перебора элементов в объекте можно использовать цикл for..in :

Для перебора элементов массива можно использовать следующий цикл:

Работа с данными в формате JSON

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

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

Использование

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

Цукерберг рекомендует:  Как создать электронную книгу

Поскольку формат JSON является подмножеством синтаксиса языка JavaScript, то он может быть быстро десериализован встроенной функцией eval (). Кроме того, возможна вставка вполне работоспособных JavaScript-функций. В языке PHP , начиная с версии 5.2.0, поддержка JSON включена в ядро в виде функций json_decode() и json_encode(), которые сами преобразуют типы данных JSON в соответствующие типы PHP и наоборот.

Синтаксис

JSON -текст представляет собой (в закодированном виде) одну из двух структур:

  1. Набор пар ключ:значение. В различных языках это реализовано как объект, запись, структура, словарь, хэш-таблица, список с ключом или ассоциативный массив. Ключом может быть только строка, значением — любая форма.
  2. Упорядоченный набор значений. Во многих языках это реализовано как массив, вектор, список или последовательность.

Это универсальные структуры данных: как правило, любой современный язык программирования поддерживает их в той или иной форме. Они легли в основу JSON , так как он используется для обмена данными между различными языками программирования.

В качестве значений в JSON используются структуры:

  1. Объект — это неупорядоченное множество пар ключ:значение, заключённое в фигурные скобки «< >«. Ключ описывается строкой, между ним и значением стоит символ «:». Пары ключ-значение отделяются друг от друга запятыми.
  2. Массив (одномерный) — это упорядоченное множество значений. Массив заключается в квадратные скобки «[ ]». Значения разделяются запятыми.
  3. Значение может быть строкой в двойных кавычках, числом, объектом, массивом, одним из литералов: true, false или null. Т.о. структуры могут быть вложены друг в друга.
  4. Строка — это упорядоченное множество из нуля или более символов юникода, заключенное в двойные кавычки. Символы могут быть указаны с использованием escape-последовательностей, начинающихся с обратной косой черты «\».

Строка очень похожа на одноимённый тип данных в языках С и Java. Число тоже очень похоже на С- или Java-число, за исключением того, что используется только десятичный формат. Пробелы могут быть вставлены между любыми двумя синтаксическими элементами.

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

Основные методы для работы с JSON в JavaScript — это:

  • JSON.parse — читает объекты из строки в формате JSON.
  • JSON.stringify — превращает объекты в строку в формате JSON, используется, когда нужно из JavaScript передать данные по сети.

1. Знакомство с методом JSON.parse

Создадим базовое web-приложение Tizen и назовем его json1.

JSON — Синтаксис

Синтаксис JSON является подмножеством синтаксиса JavaScript.

Правила синтаксиса JSON

Синтаксис JSON происходит от синтаксиса записи объектов JavaScript:

  • Данные записываются в виде пар «имя/значение»
  • Данные разделяются запятыми
  • В фигурных скобках записываются объекты
  • В квадратных скобках записываются массивы

Данные JSON – Имя и значение

Данные JSON записываются в виде пар «имя/значение».

Пара «имя/значение» состоит из имени поля (в двойных кавычках), за которым ставится двоеточие, за которым идет значение:

Внимание! Имена в JSON должны быть заключены в двойные кавычки. Имена в JavaScript нет.

JSON и объекты JavaScript

Формат JSON почти идентичен объектам JavaScript.

В JSON ключи должны быть строками, записанные в двойных кавычках:

В JavaScript ключи могут быть строками, числами или именами идентификаторов:

Значения в JSON

В JSON значения должны быть одним из следующих типов данных:

В JavaScript значения могут быть любого типа из приведенных выше плюс любым допустимым выражением JavaScript, включая:

В JSON строковые значения должны записываться в двойных кавычках:

В JavaScript строковые значения можно записывать как в двойных, так и в одинарных кавычках:

JSON использует синтаксис JavaScript

Так как синтаксис JSON происходит от синтаксиса записи объектов JavaScript, то для работы с данными JSON внутри JavaScript требуется очень мало дополнительных инструментов.

В JavaScript, например, можно создать объект и присвоить ему значения следующим образом:

Получить доступ к данным объекта JavaScript можно так:

Изменить данные объекта можно так:

Подобно тому, как объекты JavaScript могут использоваться как данные JSON, массивы JavaScript также могут использоваться как JSON.

PHP и формат передачи данных JSON

JSON (JavaScript Object Notation) – формат для обмена данными в текстовом виде. Позволяющий передавать сложные структуры данных в сериализованном виде. Этот формат передачи данных стал настолько популярен, что уже в ядро PHP начиная с версии 5.2.0, были добавлены функции по обработке данных в этом формате. А это значит, что нет необходимости в подключении дополнительных расширений. Формат данных JSON хорошо понятен человеку. Кроме того данный тип обмена данными широко используется между различными API сервисами. А при корректной разработке алгоритмов для обмена информацией, можно получить очень высокий прирост скорости чем, к примеру, при работе с данными в формате XML.

Отправка данных

Отправить данные в формате JSON можно двумя способами: сформировать GET или POST запрос с закодированными данными расположенными в GET или POST переменной или же поместить данные в тело документа. На практике обычно используется второй вариант.

Для произведения отправки данных необходимы нижеперечисленные функции:

    string json_encode (mixed value [, int options = 0 ])

В качестве параметра value указываются данные которые требуется закодировать. Поддерживается любой тип кроме типа resource. Параметр options содержит битовую маску из возможных предоставленных значений (см. таблицу с предоставленными JSON константами).

resource stream_context_create ([array options [, array params ]])

Данная функция предназначена для создания и возврата контекста потока с опциями указанными в параметре options . Необязательный параметр options должен иметь тип ассоциативного массива. Изначально, он пуст. Второй необязательный параметр params также должен являться ассоциативным массивом в формате $data[‘имя’] = значение.

string file_get_contents (string filename [, bool use_include_path [, resource context [, int offset [, int maxlen ]]]])

Использование этой функции позволяет получить содержимое файла в виде строки. Параметр filename это имя считываемого файла. В параметре use_include_path начиная с версии PHP 5 можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path. Параметр context представляет ресурс контекста, созданный с помощью функции stream_context_create(). В случае неудавшейся попытки открытия файла, будет возвращено значение false. Параметр offset содержит смещение с которого начнется чтение данных. В параметре maxlen указывается размер получаемых данных.

Примечание: смещение не указывается при работе, с удаленными потоками.

Ниже приведен пример отправки данных в формате JSON:

Здесь используется импровизированная структура данных, состоящая из начальной и конечной даты, а также массива номеров некоторых условных записей. Обратите внимание на то, что в заголовке запроса Content-Type указывается тип “application/json”.

Получение данных

Для того чтобы получить переданные данные вышеописанным способом требуется произвести чтение данных из потока ввода “php://input”.

Используемые функции для принятия данных:

    mixed json_decode (string json [, bool assoc = false [, int depth = 512 [, int options = 0 ]]])

Данная функция декодирует строку в формате JSON . В параметре json указывается строка для декодирования. Параметр assoc отвечает за то, будут ли возвращаемые данные преобразованы в ассоциативный массив. Если таковая необходимость имеется, то необходимо указать в качестве значения этого параметра true. Параметр depth указывает на глубину рекурсии. И последний четвертый параметр options содержит битовую маску опций для декодирования. На сегодняшний день поддерживается только JSON_BIGINT_AS_STRING (по умолчанию большие целые числа приводятся к числам с плавающей запятой (float))

resource fopen (string filename , string mode [, bool use_include_path [, resource context ]] )

Открывает файл и возвращает его дескриптор. Параметр filename это именованный ресурс, указывающий на файл. В параметре mode указывается тип доступа к файлу (см. таблицу со списком возможных режимов для fopen()). Далее идут два необязательных параметра это: use_include_path и context . При установке параметра use_include_path в значение true или 1 и при условии, что в качестве именованного ресурса задан относительный путь, будет осуществлен поиск открываемого файла в списке директорий используемом функциями include и require. На практике этот параметр практически не используется. Параметр context используется для указания контекста ресурса.

string stream_get_contents (resource handle [, int maxlen = -1 [, int offset = -1 ]])

Эта функция позволяет получить содержимое потока в виде строки. Параметр handle является ресурсом потока. Параметр maxlen содержит максимальное количество байт для чтения. По умолчанию он установлен в -1, что указывает на получение всех данных. Параметр offset содержит смещение, с которого начнется чтение данных. По умолчанию он также установлен в -1, что означает, что чтение будет произведено с начальной позиции.

Ниже приведен пример получения данных в формате JSON на стороне сервера:

Полученная структура данных:

Примечание: необходимо учитывать тот момент, что для работы с форматом JSON, данные должны быть в кодировке utf-8.

Предоставленные JSON константы для функции json_encode()

JSON_HEX_TAG (integer) Все кодируются в \u003C и \u003E. Доступна начиная с PHP 5.3.0.
JSON_HEX_AMP (integer) Все & кодируются в \u0026. Доступна начиная с PHP 5.3.0.
JSON_HEX_APOS (integer) Все символы ‘ кодируются в \u0027. Доступна начиная с PHP 5.3.0.
JSON_HEX_QUOT (integer) Все символы » кодируются в \u0022. Доступна начиная с PHP 5.3.0.
JSON_FORCE_OBJECT (integer) Выдавать объект вместо массива при использовании неассоциативного массива. Это полезно, когда принимающая программа или код ожидают объект или же массив пуст. Доступна начиная с PHP 5.3.0.
JSON_NUMERIC_CHECK (integer) Кодирование строк, содержащих числа, как числа. Доступна начиная с PHP 5.3.3.
JSON_BIGINT_AS_STRING (integer) Кодирует большие целые числа в виде их строковых эквивалентов. Доступна начиная с PHP 5.4.0.
JSON_PRETTY_PRINT (integer) Использовать пробельные символы в возвращаемых данных для их форматирования. Доступна начиная с PHP 5.4.0.
JSON_UNESCAPED_SLASHES (integer) Не экранировать /. Доступна начиная с PHP 5.4.0.
JSON_UNESCAPED_UNICODE (integer) Не кодировать многобайтные символы Unicode (по умолчанию они кодируются как \uXXXX). Доступна начиная с PHP 5.4.0.

Список возможных режимов для fopen() используя mode

‘r’ Открывает файл только для чтения; помещает указатель в начало файла.
‘r+’ Открывает файл для чтения и записи; помещает указатель в начало файла.
‘w’ Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует — пробует его создать.
‘w+’ Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует — пытается его создать.
‘a’ Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
‘a+’ Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
‘x’ Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст ошибку уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2).
‘x+’ Создаёт и открывает для чтения и записи; иначе имеет то же поведение что и’x’.
‘c’ Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличии от ‘w’), и вызов к этой функции не вызывает ошибку (также как и в случае с ‘x’). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (смотри flock()) перед изменением, так как использование ‘w’ может обрезать файл еще до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку).
‘c+’ Открывает файл для чтения и записи; иначе имеет то же поведение, что и ‘c’.
Цукерберг рекомендует:  Crm - Какой курс выбрать

Комментариев: 5

lavrik
Апр 30, 2014 @ 10:37:24

Технология JSON

JSON – это языконезависимый текстовый формат обмена данными. Обычно используется при обмене данными между браузером и сервером. Формат JSON (JavaScript Object Notation), представляет собой JavaScript объект и является простой текстовой строкой.

Чтобы проще было понять, что такое JSON, немного расскажу о том, как создать объект в JavaScript. Существует два способа создания одного и того же объекта. Для наглядности давайте создадим объект описывающий продукцию интернет магазина.

Первый способ

Определение объекта каталога для магазина в JavaScript может выглядеть таким образом:

Второй способ

Создать тот же объект можно с помощью литеральной нотации:

Внимание! Литеральная аннотация, по сути, и является форматом JSON.

Другими словами если на запрос браузера в ответе сервера мы передадим текст:

И этот текст будет обработан в JavaScript соответствующей функцией для работы с форматом JSON, то мы получим тот самый объект.

Функция JavaScript для работы с JSON

Чтобы преобразовать полученную строку из ответа сервера в реальный объект с полями и методами, текст нужно пропустить через специальную функцию eval().

Функция eval() предназначена для выполнения JavaScript кода переданного ей в виде текста.

В результате выполнения этого скрипта мы увидим сообщение “Привет мир!”:

Вернемся к нашему формату JSON. Принятую строку sData передадим в eval(), и выведем в сообщении весь список полей объекта.

В результате получим:

Обратите вниание на форму передачи текста в eval():

Для корректной интерпретации JSON объекта нужно обрамить текст круглыми скобками. Либо присвоить литеральную нотацию объекту:

В этом случае, сначала создастcя объект obj , а замет объект Item с полями с методами объекта obj.

С помощью формата JSON с сервера можно передавать такие данные как:

  1. запись,
  2. структура,
  3. хэш-таблица,
  4. список,
  5. ассоциативный массив.

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

В концепцию JSON заложены такие понятия как:

Объект — множество пар имя:значение, в фигурных скобках , разделяемых двоеточием.

Массив — множество индексированных значений заключенных в квадратные скобки.

Значение – число, строка, булевы значения true, false, null.

Пример использования различных значений:

Вот еще пример интерпретации сложного JSON объекта с вложенными массивами:

Как видите мы вытащили из объекта информацию хранившуюся во вложенных массивах:

Думаю со стороной клиента все понятно: получаем строку, преобразовываем в объект и работаем с ней дальше. Как же быть со стороной сервера, не вручную ведь нам формировать JSON объекты…

Функции PHP для работы с JSON

Хвала разработчикам PHP, всю сложную работу они сделали за нас. Нам не придется самостоятельно писать парсеры PHP объектов, массивов и других структур. Если мы хотим получить массив в JSON формате, нам нужно только использовать встроенные готовые php функции: json_encode() и json_decode().

К примеру, мы имеем php скрипт оперирующий все тем же объектом каталога для интернет магазина.

Теперь представим, что мы хотим передать наш созданный объект в формате JSON, для дальнейшего использования на стороне клиента. Все, что потребуется сделать это всего лишь передать в json_encode() экземпляр класса.

В результате выполнения такой строчки кода в переменную $send_json будет записана такая информация:

Этот страшный на первый взгляд набор символов, является сериализованным видом нашего объекта $Item. Так как в полях объекта используются кирилические символы, то функция заменяет их на ASCII коды, увеличивая при этом объем передаваемой информации. ( Подробнее об особенностях кодировок можно проитать в статье: PHP Кодировка страницы)

В этой статье я не буду описывать принципы передачи данных из PHP скрипта в JavaScript, так как планирую отдельно опубликовать материал по использованию технологии AJAX. В связи с этим предлогаю вручную перенести полученный JSON объект в код рассмотренного ранее JavaScript скрипта.

Как мы можем видеть, клон объекта из PHP доступен теперь в JavaScript:

Теперь попробуем десериализовать полученные данные обратно с помощью json_decode().

Допустим мы в PHP скрипте получаем строку в формате JSON содержащую информацию об объекте:

Используем json_decode( ) для десериализации полученных данных, и записываем все это в переменную $Item. Таким образом, мы получили полноценный экземпляр класса Product .

Обратите внимание в коде вторым параметров в функцию передано значение ture

Это сделанно для того, чтобы избежать ошибки:

Дело в том, что у нас в примере используются вложенные массивы для поля ‘description’, а без параметра true , функция json_decode() интерпретирует такие поля как stdClass, в следствии чего , потом к ним невозможно обратиться.

И напоследок представлю твоему вниманию уважаемый читатель, функцию с помощью которой можно сохранить читаемый вид объекта с кириллическими символами.

JSON для начинающих, с использованием javascript и jQuery

JavaScript позволяет нам не только для добавлять интерактивность веб-страницам, но делает возможным выполнять задачи, которые когда-то принадлежали серверам. JSON обеспечивает простой способ для создания и хранения структурированных данных на JavaScript. JSON очень популярен и является отличной альтернативой XML. JSON (объектная нотация JavaScript), как следует из названия, основан на создании объектов javascript. Объектами JavaScript можно легко манипулировать, разбирать, используя тот же JavaScript.

В отличие от XML, JSON предложения легко составляются как человеком, так и компьютером. Данные в JSON формате можно, например, присвоить переменной (этим мы создаем объект); затем эти данные можно прочитать посредством вновь созданного объекта.

Во-первых, мы создаем переменную для хранения наших данных, и затем мы, используя JSON, определяем объект. Наш объект довольно прост: поле firstName и значение Ray . Строки в JSON обязательно заключать в кавычки. Если вы используете числа, кавычки необязательны.

Данный пример выведет в браузере значение свойства firstName .

Создание объекта placeholder

Давайте создадим более реалистичный пример: вставим наши JSON данные в объект DOM.

Сейчас мы, вместо вывода предупреждения, помещаем данные внутрь элемента HTML. JSON данные, конечно, могут быть намного сложнее. Давайте попытаемся добавить еще несколько полей.

Отметьте, что данные JSON, для лучшего понимания, отформатированы определенным образом. Поле «joined» имеет значение 2012, которому не требуются кавычки, так как это число. Давайте рассмотрим что-то более сложное.

Добавляем массивы

Что если мы хотим ввести группу людей. тогда необходимо использовать массивы. Массив в JSON можно создать при помощи квадратных скобок. Давайте посмотрим, как наши данные будут смотреться для нескольких пользователей.

Выглядит немного сложнее, но в действительности не сложно для понимания. Объект JSON создается при помощи фигурных скобок; массив создается при помощи квадратных скобок. Итак, чтобы организовать наши данные, мы создали объект users , в который поместили массив. В массиве располагаются другие объекты. Каждая пара (имя/значение) разделяются запятой.

Обратите внимание, как изменился код для вставки имени. Мы подключили новый объект users и затем при помощи квадратных скобок указали на первый элемент в массиве. Добавим еще один уровень к структуре наших данных.

Теперь свойство joined содержит объект с несколькими полями; использовать массив нет необходимости, поэтому мы используем объектную нотацию. Теперь у нас есть данные на нескольких пользователей, пришло время пройтись по каждому пользователю и вывести их в списке.

Реализуем список из пользователей (проходим по объекту JSON)

Итак, воспользуемся javascript’ом и создадим список пользователей.

Для перебора всех свойств объекта существует конструкция for..in :

Здесь мы, проходимся по всем элементам массива; сохраняем данные в переменной output и помещаем данные в элемент с id равным placeholder . вы можете сказать, что наши данные строятся немного медленно.

Читаем JSON из внешнего файла

Было бы неплохо сохранить данные на внешний файл и прочитать их по мере надобности. Я собираюсь использовать библиотеку jQuery и поэтому для начала нам потребуется подключить библиотеку jQuery; затем вызовем функцию getJSON . Вот как выглядит наш код:

В значительной степени это тот же самый код, но данные выведены наружу. Мы просто обернули все функцией getJSON , которая делает всю тяжелую работу по чтению файла. Файл с данными data.json, предположим, находится в том же каталоге и выглядит следующим образом:

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

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих