Синтаксис 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, метод 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-форматированным или сериализованным объектом. Мы можем отправить его по сети или поместить в обычное хранилище данных.

Обратите внимание, что объект в формате 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 это текстовый формат данных, который явился из JavaScript и прочею скучную хернь. Ну, все это нахер…

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

Где и для чего используется JSON

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

Например: Сервер — Клиент.
Имеем сервер, на сервере стоит база данных которая таит в себе некую информацию. Эту информацию нам нужно получить, например из python приложения, которое вы кодите на своём ПК. Возникает вопрос, как? Вот тут-то JSON себя и проявляет во всей красе.

Ложем на сервер, скажем PHP скрипт, который мониторит входящие GET запросы. Из приложухи python отправляем запрос на сервер, PHP ловит запрос… ломится в базу данных и вытаскивает от туда информацию в виде массива. Далее полученный массив преобразуется в JSON и как обычный текст отправляется в приложения python. А там уже можно декодировать JSON и продолжить работу с инфой полученной из Базы Данных! Удобно? Круто? Да это б*ять п*здец как ахуе*но!

Например: В пределах одного приложения.
Кодите вы что-то там, такое не большое и простое. Есть необходимость где-то, что-то хранить, некую статистическую информацию, которая никогда не меняется и при этом часто используется в приложении. Использовать БД не вариант, зато JSON подойдёт в самый раз. Как такой пример работает в действии, читайте в соседней статье, ссылку кинул выше…

Синтаксис и структура JSON

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

Общие принципы:

  1. Массив всегда заключается в квадратные скобки [ … ]
  2. Объект нужно заключать в фигурные скобки
  3. Свойства и значения в двойных кавычках разделённые ( : ) «Значение» : «Свойства»
  1. Логическим (true или false).
  2. Числом, записывается без двойных кавычек.
  3. Строкой, записывается в двойные кавычки.
  4. Массивом или объектом.

Когда основные моменты структуры JSON известны, рассмотрим примеры JSON файлов и начнём с самого примитивного и простого примера.

[cc lang=»php»]
<
«Машка» : «28 год»,
«Дашка» : «35 лет»,
«Анжелка» : «30 лет»
>
[/cc]

Если декодировать этот пример из приложения, например из PHP используя функцию json_decode() то вывод будет следующим.

[cc lang=»php»]
stdClass Object
(
[Машка] => 28 год
[Дашка] => 35 лет
[Анжелка] => 30 лет
)
[/cc]

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

Или использовать табуляцию, для полной красоты записи.

[cc lang=»php»]
<
«Машка» : «28 год»,
«Дашка» : «35 лет»,
«Анжелка» : «30 лет»
>
[/cc]

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

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

[cc lang=»php»]
stdClass Object
(
[Машка] => stdClass Object
(
[Возрост] => 33
[1 час] => 150$
)

[Дашка] => stdClass Object
(
[Возрост] => 28
[1 час] => 200$
)

Илон Маск рекомендует:  Php удаление строки из файла

[Анжелка] => stdClass Object
(
[Возрост] => 28
[1 час] => 100$
)

Теперь все куда интереснее. Можно из программы получить нужный объект, например «[Дашка]» и посмотреть что там за час))) Но что если и этого мало. Нужно больше информации и по каждому объекту. Можно присобачить массив. Далее буду использовать примеры JSON в более коротком варианте, либо листинги длинные…

[cc lang=»php»]
<
«Машка» : <
«Возрост» : «33»,
«1 час» : «150$»,

«Доп инфа» : [ <
«Рост» : 169,
«Статус» : true
>]

Ну и стразу можно посмотреть в каком виде прилетит ответ. Кстати, в этом примере [] можно убрать, они тут в принципе и нахер не нужны, но для примера сойдёт.

[cc lang=»php»]
stdClass Object
(
[Машка] => stdClass Object
(
[Возрост] => 33
[1 час] => 150$
[Доп инфа] => Array
(
[0] => stdClass Object
(
[Рост] => 169
[Статус] => 1
)

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

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

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

Первое что в голову приходит, это взять соц.сеть, например API VK и поработать с ним, но нет. Не охота тратить время на создание приложения, подтверждать все по СМС и прочие, и вообще ВК дно…

Не много подумал, если же coinmarketcap.com/api/ с публичным API без всяких ключей и секретов. Круто, будем писать крипто приложение, можно какойнить виджет на сайт замутить))) Напишем прогу которая будет сообщать, какие монеты находятся в ТОП 3, какие цены, и всю херню…

Отправляем запрос на сервер

Ломимся на coinmarketcap.com и смотрим что там есть. Что бы получить ТОП 3 манеты можно отправить GET запрос по адресу https://api.coinmarketcap.com/v2/ticker/?limit=10 где параметру limit передать нужно количество монет «Значение», нас интересует 3. Пишем код.

[cc lang=»php»]
$ticker = file_get_contents(‘https://api.coinmarketcap.com/v2/ticker/?limit=3’);
$ticker = json_decode($ticker);

И сразу смотрим ответ, что там пришло.

Видим уже нечто знакомое, это сервер вернул ответ в JSON формате, в котором содержится целая куча всякой разной информации по каждой монете. Теперь осталось разобрать все это дело и забрать только то, что нам нужно. Пишем код дальше.

[cc lang=»php»]
$ticker = file_get_contents(‘https://api.coinmarketcap.com/v2/ticker/?limit=3’);
$ticker = json_decode($ticker);

foreach ($ticker->data as $key => $value) <
echo ‘ ============= TOP ‘. $value->rank .’ ==============’ . «\r\n»;
echo ‘ Монета :’ . $value->name . «\r\n»;
echo ‘ Цена :’ . $value->quotes->USD->price . «\r\n»;
echo ‘ Объём :’ . $value->quotes->USD->volume_24h . «\r\n»;
echo ‘ ==================================’ . «\r\n\r\n»;
>
[/cc]

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

Как вы понимаете я использую консоль, по скольку все это дело на PHP думаю понятно, как просто вывести все это дело на сайте.

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

JSON Синтаксис

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


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

Синтаксис JSON является производным от синтаксиса нотации объекта JavaScript:

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

Данные JSON-имя и значение

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

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

Пример

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

JSON-Оценка объектов JavaScript

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

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

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

JavaScript

Значения JSON

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

  • a string
  • a number
  • an object (JSON object)
  • an array
  • a boolean
  • null

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

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

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

JavaScript

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

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

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

Пример

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

Пример

Он также может быть доступен, как это:

Пример

Данные могут быть изменены так:

Пример

Он также может быть изменен так:

Пример

Далее в этом учебнике вы узнаете, как преобразовать объекты JavaScript в JSON.

Массивы JavaScript как JSON

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

Далее в этом учебнике вы узнаете больше о массивах как JSON.

JSON формат: создание данных, использование с PHP и JS

Что такое JSON и на что он способен? В этой статье вы узнаете, как использовать JSON для легкой работы с данными. Так же мы рассмотрим, как работать с JSON используя при этом PHP и JavaScript.

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

В этой статье мы узнаете основы работы с json форматом. Мы будем следовать следующим темам:

  • Что такое JSON формат?
  • Для каких целей используется JSON?
  • Как создавать JSON строки?
  • Простой пример JSON данных
  • Сравнение JSON с XML
  • Как работать с JSON через PHP и JS?

Что такое JSON формат?

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

После создания JSON строки, ее легко можно пересылать в любое приложение или компьютер, так как это всего лишь текст.

JSON имеет много преимуществ:

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

Буквально, аббревиатура JSON означает – JavaScript Object Notation. Как описано ранее, этот формат основан на создании объектов, что-то подобное к ассоциативным массивам в других языках программирования.

Для каких целей используется JSON?

Более всего, json используется для обмена данными между javascript и серверной стороной (php). Другими словами, для технологии ajax. Это очень удобно, когда вы передаете несколько переменных или целые массивы данных.

Как это выглядит на примере:

  1. Пользователь кликает по превьюшке картинки
  2. JavaScript обрабатывает это событие и посылает ajax запрос к PHP скрипту, передавая ID картинки.
  3. На сервере, php получает описание картинки, имя картинки, адрес к большому изображению и другую информацию из базы данных. Получив, преобразовывает в JSON формат и отправляет обратно на страницу пользователя.
  4. JavaScript получает ответ в виде JSON, обрабатывает данные, формирует html код и выводит увеличенное изображение с описанием и другой информацией.

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

Всеми любимый jQuery, имеет функции getJSON() и parseJSON(), которые помогают работать с форматом через ajax запросы.

Как создавать JSON строки?

Ниже предоставлены основные правила создания JSON строк:

  • JSON строка содержит как массив значений, так и объект (ассоциативный массив с парами имя/значение).
  • Массив должен быть обвернут в квадратные скобки, [ и ], может содержать список значений, которые отделяются через кому.
  • Объекты обворачиваются с помощью фигурных дужек, < и >, также содержат разделенные комой пары имя/значение.
  • Пары имя/значение состоят из имя поля (в двойных кавычках), после чего следует двоиточие ( : ) , после значение данного поля.
  • Значения в массиве или объекте могут быть:
    • Числовые (целые или дробные с точкой)
    • Строковые (обвернутые в двойные кавычки)
    • Логические (true или false)
    • Другие массивы (обвернутые в квадратные скобки [ и ])
    • Другие объекты (обвернутые в фигурные дужки < и >)
    • Нулевое значение (null)

Важно! Если вы используете двойные кавычки в значениях, экранируйте их с помощью обратного слеша: \». Также можно использовать hex закодированные символы, так как вы это делаете в других программных языках.

Простой пример JSON данных

Следующий пример показывает, как можно сохранять данные в «корзине» интернет магазина с помощью JSON формата:

Давайте разберем эти данные по частям:

  1. В начале и конце мы использует фигурные дужки < и >, которые дают понять, что это объект.
  2. Внутри объекта мы имеем несколько пар имя/значение:
  3. «orderID»: 12345 – поле с именем orderId и значение 12345
  4. «shopperName»: «John Smith» – поле с именем shopperName и значение John Smith
  5. «shopperEmail»: «johnsmith@example.com» – подобно, как и в предыдущем поле, здесь храниться email покупателя.
  6. «contents»: [ . ] – поле с именем content, значение которого массив.
  7. «orderCompleted»: true – поле с именем orderCompleted, значение которого true
  8. Внутри массива contents, мы имеем два объекта, которые отображают содержимое корзины. Каждый объект продукта имеет три свойства: productID, productName, quantity.

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

Сравнение JSON с XML

В большинстве случаев, вы будете думать о JSON как альтернативе XML формату – по крайней мере в рамках веб приложений. Концепция Ajax, в оригинале использует XML для обмена данными между сервером и браузером, но в последние годы JSON стал более популярным для передачи ajax данных.


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

Вот вышеописанный JSON пример, только переписанный в XML формате:

Как видите в несколько раз длиннее нежели JSON. По факту, этот пример длинной 1128 символов, в то время, как JSON версия всего лишь 323 символа. Также XML версию сложнее читать.

Естественно, нельзя судить только по одному примеру, но даже небольшие объемы информации занимают меньше места в JSON формате, нежели в XML.

Как работать с JSON через PHP и JS?

Вот мы и подошли к самому интересному – практической стороне JSON формата. Сначала отдадим дань JavaScript’у, после посмотрим, как можно манипулировать с JSON через PHP.

Создание и чтение JSON формата с помощью JavaScript

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

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

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

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

Давайте посмотрим, как это делается в JavaScript.

Создаем JSON строку из JavaScript переменной

JavaScript имеет встроенный метод, JSON.stringify(), который принимает переменную javascript и возвращает json строку репрезентируя содержимое переменной. Для примера, воспользуемся ранее созданным объектом, сконвертируем его в JSON строку.

Вот что выведется на экран:

Заметьте, что JSON.stringify() выводит JSON строки без пробелов. Сложно читать, но так более компактно, что важно при пересылке данных.

Создаем JavaScript переменную из JSON строки

Существует несколько способов парсинга JSON строк, наиболее приемлем и безопасный используя JSON.parse() метод. Он принимает JSON строку и возвращает JavaScript объект или массив содержащий данные JSON. Вот пример:

Здесь мы создавали переменную, jsonString, которая содержит JSON строку из ранее предоставленных примеров. После чего пропускали эту строку через JSON.parse() для создания объекта содержащего JSON данные, которые хранятся в cart переменной. На конец, мы проверяем наличие данных и выводим некоторую информацию средствами модального окна alert.

Выведется следующая информация:

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

Создание и чтение JSON формата с помощью PHP

PHP, подобно JavaScript’у, имеет функции позволяющие конвертировать переменные в JSON формат, и наоборот. Давайте рассмотрим их.

Создание JSON строки из PHP переменной

Json_encode() принимает PHP переменную и возвращает JSON строку, репрезентируя данные переменной. Вот наш пример «корзины» написанный на PHP:

Этот код выводит в точности такой результат, как и JavaScript пример – валидную JSON строку репрезентирующую содержимое переменных:

В реалии, ваш PHP скрипт должен посылать JSON строку как ответ на AJAX запрос, где JavaScript будет использовать JSON.parse() для превращения строки в переменные.

В функции json_encode() можно указывать дополнительные параметры, позволяющие конвертировать некоторые символы в hex.

Создание PHP переменной из JSON строки

Аналогично к вышеописанному, существует функция json_decode(), позволяющая декодировать JSON строки и помещать содержимое в переменные.

Как и в случае с JavaScript, этот код выведет следующее:

По умолчанию, json_decode() возвращает JSON объекты как PHP объекты. Подобно привычному синтаксису, мы используем -> для доступа к свойствам объекта.

Если в дальнейшем вы захотите использовать данные в виде ассоциативного массива, просто передайте вторым параметров true в функции json_decode(). Вот пример:

Это выводит тот же результат:

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

В заключение о JSON формате

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

Надеюсь, вам понравилось читать эту статью. Успешной разработки!

Что такое JSON?

JSON расшифровывается JavaScript Object Notation.

Формат JSON может использоваться с AJAX вместо XML. Поддержка формата JSON встроена в JavaScript.

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

JSON или XML?

Каждый формат имеет свои недостатки и преимущества:

  • Простота использования;
  • Упрощенный синтаксис обеспечивающий легкость прочтения кода.
  • XML поддерживается почти всеми языками программирования;
  • XML расширяем.

Синтаксис JSON

JSON включает в себя следующие структуры:

Массив

Массив — это список упорядоченных значений. Массив в JSON обозначается квадратными скобками [].

Массив в JSON может содержать неограниченное количество значений.

Объект

Объект может содержать неограниченное количество пар имя/значения. Каждое из значений само может являться объектом или массивом. Такие объекты или массивы называются вложенными.

Литералы

Объекты и массивы в JSON являются конструкциями, а литералы непосредственно данными, которые группируются этими конструкциями.

Литералы JSON:

  • Строка;
  • Число;
  • Логическое значение;
  • Значение null.

Сравнение файлов XML и JSON

Файл JSON должен иметь расширение .json.

Введение в JSON

Я начал часто подмечать, что большинство разработчиков умеют работать с JSON на поверхностном уровне или просто слышали про него, но четкого определения и понимания его сути мало кто знает. Хотя это знание является необходимым для каждого разработчика в сфере front-end, да и не только.

Введение

JSON это сокращение от JavaScript Object Notation — формата передачи данных. Как можно понять из названия, JSON произошел из JavaScript, но он доступен для использования на многих других языках, включая Python, Ruby, PHP и Java, в англоязычным странах его в основном произносят как Jason, то есть как имя ДжЭйсон, в русскоязычных странах ударение преимущественно ставится на “о” — ДжисОн.

Сам по себе JSON использует расширение .json . Когда же он определяется в других файловых форматах, как .html , он появляется в кавычках как JSON строка или может быть объектом, назначенным на переменную. Такой формат легко передавать между сервером и клиентской частью, ну или браузером.

Илон Маск рекомендует:  Контент и копирайтинг все о контенте и создании копирайтинга

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

Синтаксис и структура

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

Вот так выглядит JSON объект:

Хоть это и короткий пример, и JSON мог бы быть гораздо больше, он показывает то, что этот формат указывается двумя фигурными скобками, которые выглядят так < >, а данные в формате ключ-значние уже находятся между ними. Большинство используемых данных в JSON, заключаются в JSON объекты.

Пары ключ-значние разделены двоеточием, как например тут «key» : «value» . Каждая пара значений разделена двоеточием, таким образом середина JSON выглядит так: «key» : «value» , «key» : «value» , «key» : «value» . В нашем примере выше, первая пара ключевых значений это «first_name» : «Sammy» .


Ключи в JSON находятся с левой стороны от двоеточия. Их нужно оборачивать в скобки, как с «key» и это может быть любая строка. В каждом объекте, ключи должны быть уникальными. Такие ключевые строки могут содержать пробелы, как в «first_name» , но такой подход может усложнить получение доступа к ним во время процесса разработки, так что лучшим вариантом в таких случаях будет использование нижнего подчеркивания, как сделано тут «first_name» .

JSON значения находятся с правой стороны от двоеточия. Если быть точным, то им нужно быть одним из шести типов данных: строкой, числом, объектом, массивом, булевым значением или null .

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

Каждый тип данных, который передается как значения в JSON будет поддерживать свой собственный синтаксис, так что строки будут в кавычках, а цифры нет.

Хоть в .json файлах мы обычно видим формат нескольких строк, JSON также может быть написан в одну сплошную строку.

Такой подход наиболее распространен в файлах других форматов или при работе с JSON строкой.

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

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

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

Работа с JSON

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

Необходимые знания: Базовая компьютерная грамотность, базовые знания HTML и CSS, знакомство с основами JavaScript (см. First steps и Building blocks) и основами OOJS (see Introduction to objects).
Цель: Понять, как работать с данными, хранящимися в JSON, и создавать свои собственные объекты JSON.

Нет, действительно, что такое JSON?

JSON — текстовый формат данных, следующий за синтаксисом объекта JavaScript, который был популяризирован Douglas Crockford. Несмотря на то, что он очень похож на буквенный синтаксис объекта JavaScript, его можно использовать независимо от JavaScript и многие среды программирования имеют возможность читать (анализировать) и генерировать JSON.

JSON существует как строка — это полезно, когда вы хотите передавать данные по сети. Он должен быть преобразован в собственный объект JavaScript, если вы хотите получить доступ к данным. Это не большая проблема. JavaScript предоставляет глобальный объект JSON, который имеет методы для преобразования между ними.

Примечание: Преобразование строки в родной объект называется синтаксическим (parsing), при преобразовании родного объекта в строку, поэтому он может быть передан через сеть, называется stringification.

Объект JSON может быть сохранен в собственном файле, который в основном представляет собой текстовый файл с расширением .json и MIME type application/json .

Структура JSON

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

Если мы загрузили этот объект в программу JavaScript, например, проанализировали переменную, называемую superHeroes, мы могли бы затем получить доступ к данным внутри нее, используя ту же самую нотацию точки / скобки, которую мы рассмотрели в статье JavaScript object basics. Например:

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

  1. Сначала у нас есть имя переменной — superHeroes .
  2. Внутри мы хотим получить доступ к свойству members , поэтому мы используем [‘members’] .
  3. members содержат массив, заполненный объектами. Мы хотим получить доступ ко второму объекту внутри массива, поэтому мы используем [1] .
  4. Внутри этого объекта мы хотим получить доступ к свойству powers , поэтому мы используем [‘powers’] .
  5. Внутри свойства powers находится массив, содержащий сверхспособности выбранного героя. Нам нужен третий, поэтому мы используем [2] .

Примечание. Мы сделали JSON, увиденное выше, доступным внутри переменной в нашем примере JSONTest.html (см. исходный код). Попробуйте загрузить это, а затем получить доступ к данным внутри переменной через консоль JavaScript вашего браузера.

Массивы как JSON

Выше мы упоминали, что текст JSON в основном похож на объект JavaScript, и это в основном правильно. Причина, по которой мы говорили «в основном правильно», состоит в том, что массив также валидный JSON, например:

Вышесказанное вполне справедливо JSON. Вам просто нужно получить доступ к элементам массива (в его анализируемой версии), начиная с индекса массива, например [0][«powers»][0] .

Другие примечания

  • JSON — это чисто формат данных — он содержит только свойства, а не методы.
  • JSON требует двойных кавычек, которые будут использоваться вокруг строк и имен свойств. Одиночные кавычки недействительны.
  • Даже одна неуместная запятая или двоеточие может привести к сбою JSON-файла и не работать. Вы должны быть осторожны, чтобы проверить любые данные, которые вы пытаетесь использовать (хотя сгенерированный компьютером JSON с меньшей вероятностью включает ошибки, если программа генератора работает правильно). Вы можете проверить JSON с помощью приложения, такого как JSONLint.
  • JSON может фактически принимать форму любого типа данных, который действителен для включения внутри JSON, а не только массивов или объектов. Так, например, одна строка или номер будет действительным объектом JSON.
  • В отличие от кода JavaScript, в котором свойства объекта могут не оборачиваться в двойные кавычки, в JSON в качестве свойств могут использоваться только строки обернутые в двойные кавычки.

Активное обучение: Работа с примером JSON

Итак, давайте рассмотрим пример, чтобы показать, как мы можем использовать некоторые данные JSON на веб-сайте.

Формат JSON: пример и описание

JSON — аббревиатура от Java Script Object Notation, которая представляет собой формат, который использует текст, понятный человеку, для передачи данных, состоящих из пар атрибут — значение. Это наиболее распространенный формат данных, используемый для асинхронной связи между браузером и сервером, в значительной степени заменяющий XML (используется AJAX).

JSON — это независимый от языка формат данных, который был получен из JavaScript. С 2020 года многие языки программирования используют код для генерации и анализа данных в только в нем. Имена файлов JSON используют расширение .json.

История создания

Первоначально формат JSON разработал Дуглас Крокфорд в начале нулевых, и в последующем два конкурирующих стандарта (RFC 7159 и ECMA-404) определили его в 2013 году. Стандарт ECMA описывает только допустимый синтаксис, в то время как RFC охватывает некоторые основы безопасности и взаимодействия.

Кроме того, существует стандарт RFC 7493, который определяет ограниченный профиль, известный как I-JSON (сокращение от «Internet JSON»). Он стремится преодолеть некоторые проблемы взаимодействия. Каждый такой документ является действительным документом JSON.

Необходимость в создании этого формата выросла из потребности в реальном протоколе связи между сервером и браузером, осуществляемой в реальном времени без использования плагинов (таких, как Flash или Java-апплеты).

Развитие и применение

Как уже отмечено, Дуглас Крокфорд, будучи создателем компании StateSoftware, впервые обозначил и популяризировал формат JSON. Впоследствии соучредители договорились о создании системы, использующей стандартные возможности браузера, и предоставили абстракционный уровень для разработчиков для создания приложений с непрерывным дуплексным подключением к веб-серверу. При этом появилась возможность удерживать два HTTP-соединения открытыми и обрабатывать их до стандартного времени работы браузера, если обмен данными не производился. Соучредители провели обсуждение за круглым столом и проголосовали за то, чтобы назвать формат данных JSML или JSON, а также определить тип лицензии, по которому новая разработка станет доступна. В настоящее время формат имеет открытый исходный код.

Практическое использование

Веб-сайт JSON.org был запущен в 2002 году. В декабре 2005 года Yahoo! начал предлагать некоторые из своих веб-сервисов в этом формате. Google стал применять фиды JSON для своего веб-протокола GData только в декабре 2006 года.

Первоначально формат файла JSON предназначался для подмножества языка сценариев JavaScript (в частности, Standard ECMA-262 3rd Edition-December) и обычно использовался вместе с ним. Однако это не зависящий от языка данных формат. Код для разбора и генерации данных JSON доступен на многих языках программирования. На веб-сайте JSON перечислены все библиотеки.

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

Сам по себе JSON стал международным стандартом ECMA в 2013 году как стандарт ECMA-404, который в том же году использовался в RFC 7158 в качестве ссылки. В 2014 году RFC 7159 стал основной ссылкой на использование JSON в Интернете (например, MIME application/json).

Типы данных, синтаксис и пример

Основными типами данных JSON являются:

  • Число: десятичное число со знаком, которое может содержать дробную часть и может использовать экспоненциальную нотацию E, но не может включать не-числа (например, NaN). Формат не делает различий между целыми и числами с плавающей запятой. JavaScript использует формат двойной точности с плавающей запятой для всех своих числовых значений, но другие языки, реализующие JSON, могут кодировать их по-разному.
  • Строка: последовательность из нуля или больших символов Unicode. Строки разделяются знаками двойных кавычек и поддерживают синтаксис обратной косой чертой.
  • Литералы: любое из значений true или false.
  • Массив: упорядоченный список из нуля или более значений, каждый из которых может быть любого типа. Массивы используют квадратные скобки с запятыми.
  • Объект: неупорядоченный набор пар имя/значение, где имена (также называемые ключами) являются строками. Поскольку объекты предназначены для представления ассоциативных массивов, рекомендуется (хотя и не обязательно), чтобы каждый ключ был уникальным внутри него. Объекты разделяют фигурными скобками и используют запятые для разделения каждой пары, в то время как внутри каждой из них символ двоеточия отделяет ключ или имя от его значения.
  • Null: Пустое значение, использующее слово null.

Ограниченные пробелы разрешены и могут быть выставлены вокруг или между синтаксическими элементами (значения и пунктуации, но не в пределах строкового значения). Для этой цели только четыре специальных символа считаются пробелами: пробел, горизонтальная вкладка, перевод строки и косая черта. В частности, метка байтового порядка не должна генерироваться соответствующей реализацией (хотя она может быть принята при синтаксическом анализе JSON). Запрос в формате JSON не предоставляет синтаксиса для комментариев.

Ранние версии (например, указанные в RFC 4627) требовали, чтобы действительный документ состоял только из объекта или типа массива, который мог содержать другие типы внутри них. Такой JSON-формат, пример которого можно найти на устаревших веб-страницах, в настоящее время не используется.

Проблемы с переносимостью данных

Несмотря на то, что Дуглас Крокфорд первоначально утверждал, что JSON является строгим подмножеством JavaScript, его спецификация фактически позволяет создавать документы, нечитаемые в JavaScript. В частности, JSON допускает, чтобы значения строк Unicode U + 2028 LINE SEPARATOR и U + 2029 PARAGRAPH SEPARATOR выглядели неэкранированными в цитируемых строках, а JavaScript — нет. Это является следствием того, что JSON запрещает только «управляющие символы». Для максимальной совместимости эти символы должны быть экранированы с обратной косой чертой. Эта тонкость важна при создании JSONP.

JSON-формат: чем открыть?

Документы JSON могут кодироваться в UTF-8, UTF-16 или UTF-32, кодировка по умолчанию — UTF-8. Эти стандарты поддерживают полный набор символов «Юникода», включая символы вне основной многоязыковой плоскости (от U + 10000 до U + 10FFFF). Однако, если они экранированы, эти символы должны быть написаны с использованием суррогатных пар UTF-16 — детали, пропускаемой некоторыми анализаторами JSON-формат. Чем открыть и как будет прочитан такой файл?

Числа в данном формате являются агностическими в отношении их представления в языках программирования. Нет никакого различия между целым числом и значением с плавающей запятой: некоторые реализации могут рассматривать 42, 42.0 и 4.2E + 1 как одно и то же число, в то время как другие могут не делать этого. Кроме того, отсутствуют требования в отношении таких вопросов, как переполнение, недостаточность, потеря точности или округление. Кроме того, формат JSON ничего не говорит об обработке подписанных нулей, независимо от того, является ли 0.0 отличным от -0.0. Большинство реализаций, использующих стандарт IEEE 754 с плавающей запятой, включая JavaScript, сохраняют знаковые нули, но не все реализации JSON могут это делать.

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

Поскольку формат JSON был получен из JavaScript и его синтаксис (в основном) является подмножеством языка, для анализа данных JSON можно использовать функцию JavaScripteval. Из-за проблемы с разбором терминаторов строк Unicode, рассмотренных в предыдущем разделе, функция eval должна выполнить их замену.

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


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

С 2010 года в таких веб-браузерах как Firefox и Internet Explorer включена поддержка анализа и выгрузка в JSON-формат.

Неподдерживаемые собственные типы данных

Синтаксис JavaScript определяет несколько собственных типов данных, которые не включены в стандарт JSON: Карта, Установить, Дата, Ошибка, Регулярное выражение, Функция и некоторые другие. Эти типы данных JavaScript должны быть представлены некоторыми другими форматами, при этом обе программы согласовывают способ преобразования между типами. Сегодня существуют некоторые стандарты defacto, например, преобразование даты в строку, но ни один из них не является общепризнанным. Другие языки могут иметь различный набор собственных типов, которые должны быть сериализованы тщательно, чтобы иметь дело с этим типом преобразования.

Схема JSON

Схема служит для определения структуры данных JSON для проверки, документирования и управления взаимодействием. Она предоставляет своего рода контракт на данные, требуемые приложением, и способ их изменения.

Схема основана на концепциях из XML Schema (XSD), но является собственной. Как и в XSD, используются те же средства сериализации/десериализации как для схемы, так и для данных.

Илон Маск рекомендует:  Что такое код asp anonymoususerpass

Schema — это интернет-проект, который в настоящее время находится в 5-й версии (выпущенной 13 октября 2020 года). Существует несколько валидаторов, доступных для разных языков программирования, каждый из которых обладает различным уровнем соответствия. Стандартного расширения файлов нет, но некоторые специалисты предлагают утвердить .schema.json.

Тип MIME

Официальным типом MIME для текста JSON является «application/json». Несмотря на то что в большинстве современных реализаций принят официальный MIME-тип, многие приложения продолжают обеспечивать унаследованную поддержку других типов MIME. Многие поставщики услуг, браузеры, серверы, веб-приложения, библиотеки, фреймворки и API используют, ожидают или распознают тип MIME, содержимое которого выглядит как «текст/json» или «текст/javascript». Известные примеры включают в себя Google Search API, Yahoo!, Flickr, Facebook API, DojoToolkit 0.4 и так далее.

JSON-RPC

JSON-RPC — это протокол удаленного вызова процедур (RPC), построенный на JSON, созданный в качестве замены для XML-RPC или SOAP. Это простой протокол, который определяет только несколько типов данных и команд. Он позволяет системе отправлять уведомления (информацию на сервер, который не требует ответа) и несколько вызовов на сервер, на которые можно ответить не по порядку.

Асинхронный JavaScript и JSON (или AJAJ) относятся к той же динамической методологии веб-страниц, что и Ajax, но вместо XML именно формат данных JSON является основным. AJAJ — это технология веб-разработки, которая обеспечивает возможность веб-страницы запрашивать новые данные после загрузки в браузер. Обычно он отображает их с сервера в ответ на действия пользователя на этой странице. Например, то, что пользователь вводит в поле поиска, клиентский код затем отправляет на сервер, который сразу же отвечает раскрывающимся списком соответствующих элементов базы данных.

Проблемы безопасности

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

Данный простой и популярный, но рискованный метод использует совместимость с функцией JavaScripteval.

Некоторые разработчики ошибочно полагают, что текст в формате JSON также является синтаксически аналогичным кодом JavaScript, хотя это только отчасти верно. Поэтому считается, что простой способ для JavaScript-программы анализировать данные в этом формате — использование встроенной функции JavaScripteval, которая была разработана для оценки выражений «Яваскрипт». Вместо использования специфического парсера сам интерпретатор, таким образом, используется для выполнения данных JSON, создавая естественные JavaScript-объекты. Однако этот метод является рискованным, если есть вероятность, что данные JSON могут содержать произвольный код «Яваскрипт», который затем будет выполнен так же. Если сначала не будут приняты меры для проверки данных, метод eval подвержен уязвимостям безопасности, когда данные и вся среда JavaScript не находятся под контролем одного доверенного источника.

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

Часть 10. Использование JSON для передачи данных

Работа с объектами в родном формате JavaScript

Серия контента:

Этот контент является частью # из серии # статей: Освоение Ajax

Этот контент является частью серии: Освоение Ajax

Следите за выходом новых статей этой серии.

Если вы внимательно читаете статьи этой серии, то уже имеете широкое представление о различных форматах данных. Так, сначала мы увидели, что обычный текст и пары «имя/значение» отлично подходят для большинства асинхронных приложений. Можно оформлять данные, например, так:

И больше ничего не нужно делать. Опытные Web-пользователи и разработчики узнают в этой строке формат, который, вообще говоря, используется для передачи GET-запросов.

Затем мы обратили своё внимание на XML. Достоинства и недостатки этого формата широко обсуждаются, и неудивительно, что он появляется и в XML-приложениях. Если вы вернетесь к предыдущим статьям этой серии, то увидите, каким именно образом XML предоставляет альтернативный формат:

Это те же данные, что были представлены выше, но сейчас они сохранены в XML. Тут нет ничего выдающегося; это просто другой формат данных, который позволяет использовать XML вместо обычного текста и пар «имя/значение».

В этой статье мы возьмёмся за изучение ещё одного формата данных, называемого JavaScript Object Notation (система обозначений (нотация) объектов JavaScript), или сокращённо JSON. В JSON есть вещи, похожие на уже рассмотренные ранее форматы, и в то же время есть кое-что совершенно особое. Благодаря нему у вас появится ещё одна альтернатива в выборе форматов, а возможность выбора – это всегда хорошо.

Возможность выбора

Перед тем как углубиться в детали JSON, следует понять, зачем вообще нужно тратить ещё две статьи на изучение другого формата данных (да, следующая статья этой серии также будет посвящена JSON), особенно, когда вы уже освоили использование XML и обычного текста с парами «имя/значение». В двух словах это довольно просто: чем шире ваш выбор, тем больше вариантов решения той или иной проблемы вы можете найти, и тем выше шанс найти не просто какое-нибудь, а наилучшее решение.

Краткое резюме по XML и парам «имя/значение»

В этой серии статей мы уже рассмотрели довольно много различных ситуаций, с которыми вы могли бы столкнуться при программировании асинхронных приложений. Среди них были такие, когда наиболее верным решением было бы использовать пары «имя/значение», были также и те, в которых лучше применять XML. Коротко резюмируя изученное, первая мысль, которая должна приходить вам в голову, когда вы стоите перед дилеммой выбора формата – использовать пары «имя/значение». Этот подход почти всегда является самым простым решением для большинства асинхронных приложений и требует от вас только знаний элементарного JavaScript.

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

Добавление JSON

При использовании пар «имя/значение» или XML вы фактически с помощью JavaScript берёте данные из приложения и помещаете их в соответствующий формат. При этом JavaScript в основном работает как язык преобразования данных, извлекающий их из Web-форм и конвертирующий в формат, удобный для отправки серверной программе.

Однако иногда JavaScript используется не только как форматирующий язык. В этом случае данными для представления являются объекты JavaScript, а это уже не просто перемещение информации из Web-форм в запросы. В этом случае JavaScript приходится работать больше, так как сначала данные надо извлечь из объектов в JavaScript, а затем преобразовать их в пары «имя/значение» или XML. И вот тут на помощь приходит JSON: он позволяет легко конвертировать JavaScript-объекты в данные, которые можно отправлять как часть запроса (как синхронного, так и асинхронного).

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

Основы JSON

В простейшем случае JSON позволяет преобразовывать данные, представленные в объектах JavaScript, в строку, которую можно легко передавать от одной функции к другой или – в случае асинхронного приложения – от Web-клиента к серверной программе. Строка выглядит немного замысловато (скоро вы увидите несколько примеров), но зато её легко может интерпретировать JavaScript. JSON также позволяет формировать более сложные структуры, чем простые пары «имя/значение». Например, можно представлять массивы и сложные объекты, а не только простые списки ключей и значений.

Простой пример JSON

Всё почти элементарно. Например, пара «имя/значение» в JSON выглядит так:

Этот довольной простой пример на самом деле занимает немного больше места, чем при использовании пары «имя/значение»:

Однако удобство JSON проявляется тогда, когда необходимо объединить несколько пар «имя/значение» в одну строку. Во-первых, вы, по сути, можете создавать своего рода записи с данными, содержащие несколько пар «имя/значение», вот так:

Здесь преимущества в синтаксисе JSON по сравнению с парами «имя/значение» проявляются ещё не так явно, но теперь данные значительно проще использовать, да и читаются они немного легче. Например, понятно, что все три пары являются частью одной записи; на связь элементов внутри записи указывают ограничивающие их фигурные скобки.

Массивы значений

Если же вам нужно сформировать некий список значений, то JSON становится не только более удобным для чтения, но и более компактным. Допустим, вы хотите создать список людей. В XML вы столкнулись бы с большим количеством открывающих и закрывающих тэгов, а при использовании обычных пар «имя/значение», которые мы рассматривали в предыдущих статьях этой серии, изобрели бы в итоге свой собственный формат данных, или, возможно, просто преобразовали бы имена ключей, например, к такому виду: person1-firstName .

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

Здесь тоже нет ничего особо сложного. Мы просто получили одну переменную people , а ее значением является массив, содержащий три элемента, каждый из которых – запись о человеке, в которой указаны его имя, фамилия и адрес электронной почты. Этот пример иллюстрирует, как можно объединять записи вместе и как с помощью фигурных скобок можно группировать элементы в одно целое. Конечно, мы можем использовать такой же синтаксис и для описания структуры данных, в которой каждый элемент сам является списком:

Из примера хорошо видно, что можно создавать структуры данных, в которой каждый элемент основного списка также является списком. Ещё следует отметить, что ключи в парах «имя/значение» различны для каждого элемента основного списка (ключи пар в programmers отличаются от ключей для authors, которые в свою очередь отличаются от ключей для musicians). JSON полностью динамичен и позволяет изменять способ представления данных прямо внутри JSON-структуры.

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

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

После того как мы разобрались с форматом, его можно легко использовать в JavaScript-коде. JSON – это родной формат для JavaScript. Это значит, что для работы с JSON-данными в JavaScript нам не нужен какой-нибудь специальный инструментарий (toolkit) или API.

Присваивание переменной JSON-данных

Например, можно довольно легко создать новую JavaScript-переменную и затем непосредственно присвоить ей строку с данными, отформатированными в JSON. Вот так:

Здесь нет ничего сложного; переменная people содержит те же самые JSON-отформатированные данные, что мы уже видели. Однако данный пример пока почти бесполезен, так как удобство использования JSON-формата ещё не очевидно.

Доступ к данным

Хотя это может показаться неочевидным, но эта длинная строка сверху – обычный массив, и если вы когда-нибудь работали с массивами в JavaScript, то сможете легко получить доступ к данным. Фактически компоненты имени массива можно разделить просто точками. Так, для доступа к фамилии (lastname) первого элемента в списке программистов (programmers) в JavaScript-программе можно использовать такой код:

Заметьте, что индексация массива начинается с нуля. Доступ к искомому полю данных осуществляется примерно так: мы начинаем с people ; затем движемся к элементу programmers и указываем, что нас интересует первая запись ( [0] ); наконец, мы получаем доступ к значению по ключу lastName . В результате мы получаем строку «McLaughlin».

Ниже представлено еще несколько примеров для этой же переменной.

Пользуясь этим простым синтаксисом, можно работать с любыми структурами JSON-форматированных данных, и всё это без привлечения каких-либо дополнительных инструментариев (toolkit’ов) или API для JavaScript.

Модификация JSON-данных

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

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

Обратное преобразование в строку

Конечно же, наши изменения были бы почти бесполезными, если бы мы не могли легко конвертировать данные обратно в текстовый формат. К счастью, в JavaScript это также довольно тривиальная задача:

И всё! Мы получили строку, которую можно использовать где угодно – например, мы могли бы использовать её для формирования запроса из Ajax-приложении.

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

В этом заключается самое большое отличие JSON от всех ранее рассмотренных форматов данных. Пользуясь JSON, вы просто вызываете функцию и получаете ваши данные уже отформатированными и готовыми к дальнейшему применению. При использовании же других форматов данных форматирование возлагается на вас. Причём даже если вы решите использовать API типа DOM (Объектная модель документа), который предоставляет функции для преобразования его собственной структуры данных в текст, то вам придётся изучать этот API и использовать его объекты вместо родных объектов и родного синтаксиса JavaScript.

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

Заключение

В этой серии статей мы много внимания уделяем различным форматам данных, так как асинхронные приложения по большей части заключают в себе именно работу с данными. Если вы владеете различными инструментами и техниками, позволяющими отправлять и получать любые данные – и делать это наиболее эффективным методом для каждого отдельного типа данных – то можете считать, что вы уже уверенно стоите на пути к профессионализму в Ajax. Добавьте JSON к тому, что вы уже умеете использовать (XML и обычный текст), и вы получите инструментарий для работы с более сложными структурами данных в JavaScript.

В следующей статье этой серии мы не ограничимся рассмотрением отправки данных и подробно разберёмся, как сервер может принимать JSON-отформатированные данные и с ними работать. Мы также посмотрим, как серверная программа может отправлять клиенту данные в JSON-формате через скрипты и специальные серверные компоненты, позволяющие совместно использовать XML, обычный текст и JSON в запросах и ответах и преобразовывать их друг в друга. Главная цель здесь – добиться гибкости. Скоро вы сможете использовать все эти инструменты совместно, практически в любой мыслимой комбинации.

Ресурсы для скачивания

Похожие темы

  • Оригинал статьи Using JSON for data transfer (EN).
  • Освоение Ajax : прочтите предыдущие статьи этой серии.
  • JSON.org (EN): посетите Web-сайт, посвящённый JSON, чтобы получить дополнительную информацию по этому формату данных, включая ссылки на некоторые реализации JSON API.
  • В ряде статей на developerWorks рассматриваются более сложные темы, связанные с JSON:
    • «Преобразование XML в JSON с помощью PHP» (EN) Senthil Nathan, Edward J. Pring, and John Morar (январь 2007 г.)
    • «Кэширование и JSON» (EN) Bakul L. Patel (октябрь 2006 г.)
    • «Генерация JSON из XML для использования в Ajax» (EN) Jack D. Herrington (сентябрь 2006 г.)
  • Раздел XML на developerWorks : всё об XML в соответствующем разделе developerWorks.
  • xml.com (EN): еще один хороший ресурс обо всём, что связано с XML.
  • «Создание динамических Java-приложений» Philip McCarthy (developerWorks, сентябрь 2005 г.): взгляд на Ajax с серверной стороны (применительно к Java).
  • «Сериализация объектов Java для Ajax» Philip McCarthy (developerWorks, октябрь 2005 г.): в этой статье рассматривается, как можно посылать объекты через сеть и как они могут взаимодействовать с Ajax (применительно к Java).
  • «Вызов Web-сервисов SOAP с помощью Ajax» (EN) (James Snell, developerWorks, октябрь 2005 г.): довольно серьёзная статья об интеграции Ajax с существующими Web-сервисами, основанными на SOAP.
  • Домашняя страничка DOM на сайте World W >

    Комментарии

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

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL