Как правильно составить json

Если вы тестируете API, то должны знать про два основных формата передачи данных:

  • XML — используется в SOAP (всегда) и REST-запросах (реже);

  • JSON — используется в REST-запросах.

Сегодня я расскажу вам про JSON. И расскажу в основном с точки зрения «послать запрос в Postman или прочитать ответ», потому что статья рассчитана на студентов, впервые работающих с Postman.

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

JSON используется в REST API. По крайней мере, тестировщик скорее всего столкнется с ним именно там.

См также:

Что такое API — общее знакомство с API

Что такое XML — второй популярный формат

Введение в SOAP и REST: что это и с чем едят — видео про разницу между SOAP и REST

В SOAP API возможен только формат XML, а вот REST API поддерживает как XML, так и JSON. Разработчики предпочитают JSON — он легче читается человеком и меньше весит. Так что давайте разберемся, как он выглядит, как его читать, и как ломать!

Содержание

  • Как устроен JSON

    • JSON-объект

      • Как устроен

      • Ключ или свойство?

      • Итого

    • JSON-массив

      • Как устроен

      • Значения внутри

      • Итого

  • JSON vs XML

  • Well Formed JSON

    1. Данные написаны в виде пар ключ:значение

    2. Данные разделены запятыми

    3. Объект находится внутри фигурных скобок {}

    4. Массив — внутри квадратных []

  • Итого

Как устроен JSON

В качестве значений в JSON могут быть использованы:

  • JSON-объект

  • Массив

  • Число (целое или вещественное)

  • Литералы true (логическое значение «истина»), false (логическое значение «ложь») и null

  • Строка

Я думаю, с простыми значениями вопросов не возникнет, поэтому разберем массивы и объекты. Ведь если говорить про REST API, то обычно вы будете отправлять / получать именно json-объекты.

JSON-объект

Как устроен

Возьмем пример из документации подсказок Дадаты по ФИО:

{
  "query": "Виктор Иван",
  "count": 7
}

И разберемся, что означает эта запись.

Объект заключен в фигурные скобки {}

JSON-объект — это неупорядоченное множество пар «ключ:значение».

Ключ — это название параметра, который мы передаем серверу. Он служит маркером для принимающей запрос системы: «смотри, здесь у меня значение такого-то параметра!». А иначе как система поймет, где что? Ей нужна подсказка!

Вот, например, «Виктор Иван» — это что? Ищем описание параметра «query» в документации — ага, да это же запрос для подсказок!

Это как если бы мы вбили строку «Виктор Иван» в GUI (графическом интерфейсе пользователя):

Когда пользователь начинает вводить данные в формочку, то сразу видит результат — появляется список подсказок. Это значит, что разработчик прописал в коде условие — делать некое действие на каждый ввод символа в это поле. Какое действие? Можно увидеть через f12.

Открываем вкладку Network, вбиваем «Виктор Иван» и находим запрос, который при этом уходит на сервер. Ого, да это тот самый пример, что мы разбираем!

Клиент передает серверу запрос в JSON-формате. Внутри два параметра, две пары «ключ-значение»:

  • query — строка, по которой ищем (то, что пользователь вбил в GUI);

  • count — количество подсказок в ответе (в Дадате этот параметр зашит в форму, всегда возвращается 7 подсказок. Но если дергать подсказки напрямую, значение можно менять!)

Пары «ключ-значение» разделены запятыми:

Строки берем в кавычки, числа нет:

Конечно, внутри может быть не только строка или число. Это может быть и другой объект! Или массив… Или объект в массиве, массив в объекте… Любое количество уровней вложенности =))

Объект, массив, число, булево значение (true / false) — если у нас НЕ строка, кавычки не нужны. Но в любом случае это будет значение какого-то ключа:

НЕТ

ДА

{

«a»: 1,

{ x:1, y:2 }

}

{

«a»: 1,

«inner_object»: { «x»:1, «y»:2 }

}

{

«a»: 1,

[2, 3, 4]

}

{

«a»: 1,

«inner_array»: [2, 3, 4]

}

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

Так правильно

Так тоже правильно

{

«query»: «Виктор Иван»,

«count»: 7

}

{  «query»:»Виктор Иван», «count»:7}

Ключ — ВСЕГДА строка, но мы все равно берем его в кавычки. В JavaScript этого можно не делать, в JSON нельзя.

Так правильно

Так правильно в JS, но неправильно в JSON

{

«query»: «Виктор Иван»,

«count»: 7

}

{

query: «Виктор Иван»,

count: 7

}

По крайней мере, если вы работаете с простыми значениями ключей, а несколько слов записываете в верблюжьемРегистре или в змеином_регистре. Если вы хотите написать в ключе несколько слов через пробел, ключ нужно взять в кавычки.

НЕТ

ДА

{

my query: «Виктор Иван»

}

{

«my query»: «Виктор Иван»

}

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

См также:

CamelCase, snake_case и другие регистры — подробнее о разных регистрах

Писать ключи можно в любом порядке. Ведь JSON-объект — это неупорядоченное множество пар «ключ:значение».

Так правильно

Так тоже правильно

{

query: «Виктор Иван»,

count: 7

}

{

count: 7,

query: «Виктор Иван»

}

Очень важно это понимать, и тестировать! Принимающая запрос система должна ориентировать на название ключей в запросе, а не на порядок их следования. Ключевое слово «должна» )) Хотя знаю примеры, когда от перестановки ключей местами всё ломалось, ведь «первым должен идти запрос, а не count!».

Ключ или свойство?

Вот у нас есть JSON-объект:

{
  "query": "Виктор Иван",
  "count": 7
}

Что такое «query»? Если я хочу к нему обратиться, как мне это сказать? Есть 2 варианта, и оба правильные:

— Обратиться к свойству объекта;

— Получить значение по ключу.

То есть «query» можно назвать как ключом, так и свойством. А как правильно то?

Правильно и так, и так! Просто есть разные определения объекта:

Объект

В JS объект — это именно объект. У которого есть набор свойств и методов:

  • Свойства — описывают, ЧТО мы создаем.

  • Методы — что объект умеет ДЕЛАТЬ.

То есть если мы хотим создать машину, есть два пути:

  1. Перечислить 10 разных переменных — модель, номер, цвет, пробег…

  2. Создать один объект, где будут все эти свойства.

Аналогично с кошечкой, собачкой, другом из записной книжки…

Объектно-ориентированное программирование (ООП) предлагает мыслить не набором переменных, а объектом. Хотя бы потому, что это логичнее. Переменных в коде будет много, как понять, какие из них взаимосвязаны?

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

Например, создадим кошечку:

var cat = {

name: “Pussy”,

year: 1,

 

sleep: function() {

// sleeping code

}

}

В объекте cat есть:

  • Свойства — name, year (что это за кошечка)

  • Функции — sleep (что она умеет делать, описание поведения)

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

Если потом нужно будет получить информацию по кошечке, разработчик сделает REST-метод getByID, searchKitty, или какой-то другой. А в нем будет возвращать свойства объекта.

То есть метод вернет

{

name: “Pussy”,

year: 1,

}

И при использовании имени вполне уместно говорить «обратиться к свойству объекта». Это ведь объект (кошечка), и его свойства!

Набор пар «ключ:значение»

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

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

  • client_fio (в коде это свойство fio объекта client)

  • kitty_name (в коде это свойство name объекта cat)

  • car_model (в коде это свойство model объекта car)

В таком случае логично называть эти параметры именно ключами — мы хотим получить значение по ключу.

Но в любом случае, и «ключ», и «свойство» будет правильно. Не пугайтесь, если в одной книге / статье / видео увидели одно, в другой другое… Это просто разные трактовки ¯_(ツ)_/¯

Итого

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

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

  • число

  • строка

  • массив

  • другой объект

И только строку мы берем в кавычки!

JSON-массив

Как устроен

Давайте снова начнем с примера. Это массив:

[ "MALE", "FEMALE" ]

Массив заключен в квадратные скобки []

Внутри квадратных скобок идет набор значений. Тут нет ключей, как в объекте, поэтому обращаться к массиву можно только по номеру элемента. И поэтому в случае массива менять местами данные внутри нельзя. Это упорядоченное множество значений.

Значения разделены запятыми:

Значения внутри

Внутри массива может быть все, что угодно:

Цифры

[ 1, 5, 10, 33 ]

Строки

[ "MALE", "FEMALE" ]

Смесь

[ 1, "Андрюшка",  10, 33 ]

Объекты

Да, а почему бы и нет:

[1, {a:1, b:2}, "такой вот массивчик"]

Или даже что-то более сложное. Вот пример ответа подсказок из Дадаты:

[
        {
            "value": "Иванов Виктор",
            "unrestricted_value": "Иванов Виктор",
            "data": {
                "surname": "Иванов",
                "name": "Виктор",
                "patronymic": null,
                "gender": "MALE"
            }
        },
        {
            "value": "Иванченко Виктор",
            "unrestricted_value": "Иванченко Виктор",
            "data": {
                "surname": "Иванченко",
                "name": "Виктор",
                "patronymic": null,
                "gender": "MALE"
            }
        },
        {
            "value": "Виктор Иванович",
            "unrestricted_value": "Виктор Иванович",
            "data": {
                "surname": null,
                "name": "Виктор",
                "patronymic": "Иванович",
                "gender": "MALE"
            }
        }
]

Система возвращает массив подсказок. Сколько запросили в параметре count, столько и получили. Каждая подсказка — объект, внутри которого еще один объект. И это далеко не сама сложная структура! Уровней вложенности может быть сколько угодно — массив в массиве, который внутри объекта, который внутри массива, который внутри объекта…

Ну и, конечно, можно и наоборот, передать массив в объекте. Вот пример запроса в подсказки:

{
"query": "Виктор Иван",
"count": 7,
"parts": ["NAME", "SURNAME"]
}

Это объект (так как в фигурных скобках и внутри набор пар «ключ:значение»). А значение ключа «parts» — это массив элементов!

Итого

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

А вот внутри него может быть все, что угодно:

  • числа

  • строки

  • другие массивы

  • объекты

  • смесь из всего вышеназванного

JSON vs XML

В SOAP можно применять только XML, там без вариантов.

В REST можно применять как XML, так и JSON. Разработчики отдают предпочтение json-формату, потому что он проще воспринимается и меньше весит. В XML есть лишняя обвязка, название полей повторяется дважды (открывающий и закрывающий тег).

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

XML

<req>

	<surname>Иванов</surname>

	<name>Иван</name>

	<patronymic>Иванович</patronymic>

	<birthdate>01.01.1990</birthdate>

	<birthplace>Москва</birthplace>

	<phone>8 926 766 48 48</phone>

</req>

JSON

{

	"surname": "Иванов",

	"name": "Иван",

	"patronymic": "Иванович",

	"birthdate": "01.01.1990",

	"birthplace": "Москва",

	"phone": "8 926 766 48 48"

}

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

См также:

Инфографика REST vs SOAP

Well Formed JSON

Разработчик сам решает, какой JSON будет считаться правильным, а какой нет. Но есть общие правила, которые нельзя нарушать. Наш JSON должен быть well formed, то есть синтаксически корректный.

Чтобы проверить JSON на синтаксис, можно использовать любой JSON Validator (так и гуглите). Я рекомендую сайт w3schools. Там есть сам валидатор + описание типичных ошибок с примерами.

Но учтите, что парсеры внутри кода работают не по википедии или w3schools, а по RFC, стандарту. Так что если хотите изучить «каким должен быть JSON», то правильнее открывать RFC и искать там JSON Grammar. Однако простому тестировщику хватит набора типовых правил с w3schools, их и разберем.

Правила well formed JSON:

  1. Данные написаны в виде пар «ключ:значение»

  2. Данные разделены запятыми

  3. Объект находится внутри фигурных скобок {}

  4. Массив — внутри квадратных []

1. Данные написаны в виде пар «ключ:значение»

Например, так:

"name":"Ольга"

В JSON название ключа нужно брать в кавычки, в JavaScript не обязательно — он и так знает, что это строка. Если мы тестируем API, то там будет именно JSON, так что кавычки обычно нужны.

Но учтите, что это правило касается JSON-объекта. Потому что json может быть и числом, и строкой. То есть:

123

Или

"Ольга"

Это тоже корректный json, хоть и не в виде пар «ключ:значение».

И вот если у вас по ТЗ именно json-объект на входе, попробуйте его сломать, не передав ключ. Ещё можно не передать значение, но это не совсем негативный тест — система может воспринимать это нормально, как пустой ввод.

2. Данные разделены запятыми

Пары «ключ:значение» в объекте разделяются запятыми. После последней пары запятая не нужна!

Типичная ошибка: поставили запятую в конце объекта:

{
  "query": "Виктор Иван",
  "count": 7,
}

Это последствия копипасты. Взяли пример из документации, подставили в постман (ну или разработчик API подставил в код, который будет вызывать систему), а потом решили поменять поля местами.

В итоге было так:

{
  "count": 7,
  "query": "Виктор Иван"
}

Смотрим на запрос — ну, query то важнее чем count, надо поменять их местами! Копипастим всю строку ««count»: 7,», вставляем ниже. Перед ней запятую добавляем, а «лишнюю» убрать забываем. По крайней мере у меня это частая ошибка, когда я «кручу-верчу, местами поменять хочу».

Другой пример — когда мы добавляем в запрос новое поле. Примерный сценарий:

  1. У меня уже есть работающий запрос в Postman-е. Но в нем минимум полей.

  2. Я его клонирую

  3. Копирую из документации нужное мне поле. Оно в примере не последнее, так что идёт с запятой на конце.

  4. Вставляю себе в конце запроса — в текущий конец добавляю запятую, потом вставляю новую строку.

  5. Отправляю запрос — ой, ошибка! Из копипасты то запятую не убрала!

Я на этот сценарий постоянно напарываюсь при тестировании перестановки полей. А ведь это нужно проверять! Хороший запрос должен быть как в математической присказке: «от перемены мест слагаемых сумма не меняется».

Не зря же определение json-объекта гласит, что «это неупорядоченное множество пар ключ:значение». Раз неупорядоченное — я могу передавать ключи в любом порядке. И сервер должен искать по запросу название ключа, а не обращаться к индексу элемента.

Разработчик, который будет взаимодействовать с API, тоже человек, который может ошибиться. И если система будет выдавать невразумительное сообщение об ошибке, можно долго думать, где конкретно ты налажал. Поэтому ошибки тоже тестируем.

Чтобы протестировать, как система обрабатывает «плохой json», замените запятую на точку с запятой:

{
  "count": 7;
  "query": "Виктор Иван"
}

Или добавьте лишнюю запятую в конце запроса — эта ошибка будет встречаться чаще!

{
  "count": 7,
  "query": "Виктор Иван",
}

Или пропустите запятую там, где она нужна:

{
"count": 7
"query": "Виктор Иван"
}

Аналогично с массивом. Данные внутри разделяются через запятую. Хотите попробовать сломать? Замените запятую на точку с запятой! Тогда система будет считать, что у вас не 5 значений, а 1 большое:

[1, 2, 3, 4, 5] <!-- корректный массив на 5 элементов* -->

[1; 2; 3; 4; 5] <!-- некорректный массив, так как такого разделителя быть не должно. Это может быть простой строкой, но тогда нужны кавычки -->!

 *Я добавила комментарии внутри блока кода. Но учтите, что в JSON комментариев нет. Вообще. Так что если вы делаете запрос в Postman, не получится расставить комментарии у разных строчек в JSON-формате.

3. Объект находится внутри фигурных скобок {}

Это объект:

{a: 1, b: 2}

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

{a: 1, b: 2
a: 1, b: 2}

Или попробуйте передать объект как массив:

[ a: 1, b: 2 ]

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

4. Массив — внутри квадратных []

Это массив:

[1, 2]

Чтобы сломать это условие, уберите одну квадратную скобку:

[1, 2
1, 2]

Или попробуйте передать массив как объект, в фигурных скобках:

{ 1, 2 }

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

Итого

JSON (JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript. Легко читается человеком и машиной. Часто используется в REST API (чаще, чем XML).

Корректные значения JSON:

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

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

  • Число (целое или вещественное).

  • Литералы true (логическое значение «истина»), false (логическое значение «ложь») и null.

  • Строка

При тестировании REST API чаще всего мы будем работать именно с объектами, что в запросе, что в ответе. Массивы тоже будут, но обычно внутри объектов.

Комментариев в JSON, увы, нет.

Правила well formed JSON:

  1. Данные в объекте написаны в виде пар «ключ:значение»

  2. Данные в объекте или массиве разделены запятыми

  3. Объект находится внутри фигурных скобок {}

  4. Массив — внутри квадратных []

См также:

Introducing JSON

RFC (стандарт)

Что такое XML

+комментарии к этой статье =)

PS — больше полезных статей ищите в моем блоге по метке «полезное». А полезные видео — на моем youtube-канале

Наверняка вы когда-нибудь слышали о JSON. Что же это такое? Что он может и как его использовать?

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

  • Что такое JSON?
  • Для чего используется JSON?
  • Как создать строку JSON?
  • Простой пример строки JSON.
  • Сравним JSON и XML.
  • Как работать с JSON в JavaScript и PHP?

Что такое JSON?

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

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

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

  • Он компактен.
  • Его предложения легко читаются и составляются как человеком, так и компьютером.
  • Его легко преобразовать в структуру данных для большинства языков программирования (числа, строки, логические переменные, массивы и так далее)
  • Многие языки программирования имеют функции и библиотеки для чтения и создания структур JSON.

Название JSON означает JavaScript Object Notation (представление объектов JavaScript). Как и представляет имя, он основан на способе определения объектов (очень похоже на создание ассоциативных массивов в других языках) и массивов.

Для чего используется JSON?

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

Пример:

  1. Пользователь нажимает миниатюру продукта в онлайн магазине.
  2. JavaScript, выполняющийся на браузере, генерирует запрос AJAX к скрипту PHP, запущенному на сервере, передавая ID выбранного продукта.
  3. Скрипт PHP получает название продукта, описание, цену и другую информацию из базы данных. Затем составляет из данных строку JSON и отсылает ее браузеру.
  4. JavaScript, выполняющийся на браузере, получает строку JSON, декодирует ее и выводит информацию о продукте на странице для пользователя.

Также можно использовать JSON для отправки данных от браузера на сервер, передавая строку JSON в качестве параметра запросов GET или POST. Но данный метод имеет меньшее распространение, так как передача данных через запросы AJAX может быть упрощена. Например, ID продукта может быть включен в адрес URL как часть запроса GET.

Библиотека jQuery имеет несколько методов, например,  getJSON() и parseJSON(), которые упрощают получение данных с помощью JSON через запросы AJAX.

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

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

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

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

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

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

{
  "orderID": 12345,
  "shopperName": "Ваня Иванов",
  "shopperEmail": "ivanov@example.com",
  "contents": [
    {
      "productID": 34,
      "productName": "Супер товар",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName": "Чудо товар",
      "quantity": 3
    }
  ],
  "orderCompleted": true
}

Рассмотрим строку подробно:

  • Мы создаем объект с помощью фигурных скобок  ({ и }).
  • В объекте есть несколько пар имя/значение:
    "orderID": 12345
    Свойство с именем "orderId" и целочисленным значением  12345
    "shopperName": "Ваня Иванов"
    свойство с именем "shopperName" и строковым значением "Ваня Иванов"
    "shopperEmail": "johnsmith@example.com"
    Свойство с именем "shopperEmail" и строковым значением "ivanov@example.com"
    "contents": [ ... ]
    Свойство с именем "contents", значение которого является массивом
    "orderCompleted": true
    Свойство с именем "orderCompleted" и логическим значением true
  • В массиве "contents" есть 2 объекта, представляющие отдельные позиции в заказе. Каждый объект содержит 3 свойства: productID, productName, и quantity.

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

<script type="text/javascript">
var cart = {
  "orderID": 12345,
  "shopperName": "Ваня Иванов",
  "shopperEmail": "ivanov@example.com",
  "contents": [
    {
      "productID": 34,
      "productName": "Супер товар",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName": "Чудо товар",
      "quantity": 3
    }
  ],
  "orderCompleted": true
};
</script>

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

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

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

Вот как будет выглядеть выше приведенный пример объекта на XML:

<object>
  <property>
    <key>orderID</key>
    <number>12345</number>
  </property>
  <property>
    <key>shopperName</key>
    <string>Ваня Иванов</string>
  </property>
  <property>
    <key>shopperEmail</key>
    <string>ivanov@example.com</string>
  </property>
  <property>
    <key>contents</key>
    <array>
      <object>
        <property>
          <key>productID</key>
          <number>34</number>
        </property>
        <property>
          <key>productName</key>
          <string>Супер товар</string>
        </property>
        <property>
          <key>quantity</key>
          <number>1</number>
        </property>       
      </object>
      <object>
        <property>
          <key>productID</key>
          <number>56</number>
        </property>
        <property>
          <key>productName</key>
          <string>Чудо товар</string>
        </property>
        <property>
          <key>quantity</key>
          <number>3</number>
        </property>
      </object>
    </array>
  </property>
  <property>
    <key>orderCompleted</key>
    <boolean>true</boolean>
  </property> 
</object>

Версия XML имеет существенно больший размер. В действительности она имеет длину 1128 символов, а вариант JSON — только 323 символа. Версию XML также достаточно трудно воспринимать.

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

Работаем со строкой JSON в JavaScript

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

Большинство языков программирования имеют инструменты для простого преобразования переменных в строки JSON и наоборот.

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

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

<script type="text/javascript">
 
var cart = {
  "orderID": 12345,
  "shopperName": "Ваня Иванов",
  "shopperEmail": "ivanov@example.com",
  "contents": [
    {
      "productID": 34,
      "productName": "Супер товар",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName": "Чудо товар",
      "quantity": 3
    }
  ],
  "orderCompleted": true
};
 
alert ( JSON.stringify( cart ) );
 
</script>

Данный код выдаст:

{"orderID":12345,"shopperName":"Ваня Иванов","shopperEmail":"ivanov@example.com","contents":[{"productID":34,"productName":"Супер товар","quantity":1},{"productID":56,"productName":"Чудо товар","quantity":3}],"orderCompleted":true}

Обратите внимание, что метод JSON.stringify() возвращает строку JSON без пробелов. Ее сложнее читать, но зато она более компактна для передачи через сеть.

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

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

<script type="text/javascript">
 
var jsonString = '                          
{                                           
  "orderID": 12345,                         
  "shopperName": "Ваня Иванов",             
  "shopperEmail": "ivanov@example.com",     
  "contents": [                             
    {                                       
      "productID": 34,                      
      "productName": "Супер товар",         
      "quantity": 1                         
    },                                      
    {                                       
      "productID": 56,                      
      "productName": "Чудо товар",          
      "quantity": 3                         
    }                                       
  ],                                        
  "orderCompleted": true                    
}                                           
';
 
var cart = JSON.parse ( jsonString );
 
alert ( cart.shopperEmail );
alert ( cart.contents[1].productName );
 
</script>

Мы создали переменную jsonString, которая содержит строку JSON нашего примера с заказом. Затем мы передаем данную строку методу JSON.parse(), который создает объект, содержащий данные JSON и сохраняет его в переменной cart. Остается только осуществить проверку, выведя свойства объекта shopperEmail и productName массива contents.

В результате мы получим следующий вывод:

ivanov@example.com
Чудо товар

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

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

Работаем со строкой JSON в PHP

PHP, как и JavaScript, имеет встроенные функции для работы с JSON строками.

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

Функция json_encode() принимает переменную PHP и возвращает строку JSON, представляющую содержание переменной. Вот наш пример с заказом, написанный на PHP:

<?php
$cart = array(
  "orderID" => 12345,
  "shopperName" => "Ваня Иванов",
  "shopperEmail" => "ivanov@example.com",
  "contents" => array(
    array(
      "productID" => 34,
      "productName" => "Супер товар",
      "quantity" => 1
    ),
    array(
      "productID" => 56,
      "productName" => "Чудо товар",
      "quantity" => 3
    )
  ),
  "orderCompleted" => true
);
 
echo json_encode( $cart );
?>

Данный код возвращает абсолютно такую же строку JSON, как и в примере с JavaScript:

{"orderID":12345,"shopperName":"Ваня Иванов","shopperEmail":"ivanov@example.com","contents":[{"productID":34,"productName":"Супер товар","quantity":1},{"productID":56,"productName":"Чудо товар","quantity":3}],"orderCompleted":true}

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

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

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

Для преобразования строки JSON в переменную PHP используется метод json_decode(). Заменим наш пример для JavaScript с методом JSON.parse() на код PHP:

<?php
$jsonString = '
{                                          
  "orderID": 12345,                        
  "shopperName": "Ваня Иванов",             
  "shopperEmail": "ivanov@example.com", 
  "contents": [                            
    {                                      
      "productID": 34,                     
      "productName": "Супер товар",        
      "quantity": 1                       
    },                                     
    {                                      
      "productID": 56,                     
      "productName": "Чудо товар",       
      "quantity": 3                        
    }                                      
  ],                                       
  "orderCompleted": true                   
}                                          
';
 
$cart = json_decode( $jsonString );
echo $cart->shopperEmail . "<br>";
echo $cart->contents[1]->productName . "<br>";
?>

Как и для JavaScript данный код выдаст:

ivanov@example.com
Чудо товар

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

Если вам нужен объект JSON в виде ассоциированного массива PHP, нужно передать true в качестве второго аргумента функции json_decode(). Например:

$cart = json_decode( $jsonString, true );
echo $cart["shopperEmail"] . "<br>";
echo $cart["contents"][1]["productName"] . "<br>";

Данный код выдаст такой же вывод:

ivanov@example.com
Чудо товар

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

Заключение

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

замечания

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

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

  • JSON широко распространен в программном обеспечении, которое включает в себя архитектуру клиент-сервер для обмена данными между клиентом и сервером.
  • JSON прост в использовании и имеет чисто текстовый, легкий и удобный для чтения формат, и люди часто неправильно понимают как замену XML.
  • Хотя аббревиатура начинается с JavaScript, JSON не является языком или имеет какие-либо языковые литералы, это просто спецификация для обозначения данных.
  • Это независимая от платформы и языка и встроенная поддержка практически всех языков / фреймворков первой линии, таких как поддержка формата данных JSON, доступна на всех популярных языках, некоторые из которых являются C #, PHP, Java, C ++, Python, Ruby и многое другое.
  • Официальным типом интернет-медиа для JSON является application / json.
  • Расширение имени файла JSON является .json.

Версии

Поскольку у JSON нет никаких обновлений, есть только 1 версия JSON, ссылка ниже перенаправляется на исходный документ RFC, который является RFC 4627.

Версия Дата выхода
оригинал 2006-07-28

Синтаксис JSON (JavaScript Object Notation) основан на подмножестве JavaScript (см. Также json.org ).

Действительным выражением JSON может быть один из следующих типов данных

  • простые типы данных: String, Number, Boolean, Null
  • составные типы данных: значение, объект, массив

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

Строка JSON должна быть заключена в двойные кавычки и может содержать ноль или более символов Unicode; Разрешения обратной косой черты разрешены. Принятые номера JSON находятся в нотации E. Булевы — одно из true , false . Null — зарезервированное ключевое слово null .

Тип данных Примеры действительных JSON
### String "apple"
"苹果"
"u00c4pfeln"
""
### Число 3
1.4
-1.5e3
### Boolean true
false
### Ноль null

Композитные типы данных

Значение

Значение JSON может быть одним из следующих: String, Number, Boolean, Null, Object, Array.

объект

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

массив

JSON Array — упорядоченная коллекция значений JSON.

Пример массива JSON:

["home", "wooden"]

Примеры объектов JSON:

{
    "id": 1,
    "name": "A wooden door",
    "price": 12.50,
    "tags": ["home", "wooden"]
}

[
  1,
  2,
  [3, 4, 5, 6],
  {
    "id": 1,
    "name": "A wooden door",
    "price": 12.50,
    "tags": ["home", "wooden"]
  }
]

Онлайн-инструменты для проверки и форматирования данных JSON:

  • http://jsonlint.com/
  • http://www.freeformatter.com/json-validator.html
  • http://jsonviewer.stack.hu/
  • http://json.parser.online.fr/

Объект JSON

Объект JSON окружен фигурными фигурными скобками и содержит пары ключ-значение.

{ "key1": "value1", "key2": "value2", ... }

Ключи должны быть действительными строками, окруженными двойными кавычками. Значения могут быть объектами JSON, числами, строками, массивами или одним из следующих «буквальных имен»: false , null или true . В паре ключ-значение ключ отделяется от значения двоеточием. Несколько пар ключ-значение разделяются запятыми.

Заказ на объекты не важен. Таким образом, следующий объект JSON эквивалентен приведенному выше:

{ "key2": "value2", "key1": "value1", ... }

Чтобы суммировать все это, это пример действительного объекта JSON:

{
  "image": {
    "width":  800,
    "height": 600,
    "title":  "View from 15th Floor",
    "thumbnail": {
      "url": "http://www.example.com/image/481989943",
      "height": 125,
      "width":  100
    },
    "visible": true,
    "ids": [116, 943, 234, 38793]
  }
}

Общие примеры объектов JSON со связанными (Java) объектными аналогами

В этом примере предполагается, что объект «root», который сериализуется в JSON, является экземпляром следующего класса:

public class MyJson {
}

Пример 1: Пример экземпляра MyJson , а именно:

{}

т.е. поскольку класс не имеет полей, сериализуются только фигурные скобки. Кудрявые скобки являются общими разделителями для представления объекта . Обратите внимание также, как корневой объект не сериализуется как пара ключ-значение. Это справедливо и для простых типов (String, numbers, array), когда они не являются полями внешнего объекта.

Пример 2: добавим некоторые поля в MyJson и инициализируем их некоторыми значениями:

// another class, useful to show how objects are serialized when inside other objects
public class MyOtherJson {} 

// an enriched version of our test class
public class MyJson {
  String myString = "my string";
  int myInt = 5;
  double[] myArrayOfDoubles = new double[] { 3.14, 2.72 };
  MyOtherJson objectInObject = new MyOtherJson();    
}

Это связанное JSON-представление:

{
  "myString" : "my string",
  "myInt" : 5,
  "myArrayOfDoubles" : [ 3.14, 2.72 ],
  "objectInObject" : {}
}

Обратите внимание, как все поля сериализуются в структуре значений ключа, где ключ — это имя поля, содержащего значение. Общие разделители для массивов являются квадратными скобками. Также обратите внимание, что за каждой парой ключ-значение следует запятая, за исключением последней пары.

JSON Array

JSON Array — упорядоченный набор значений. Он окружен квадратными скобками, то есть [] , а значения разделены запятой:

{ "colors" : [ "red", "green", "blue" ] }

JSON Arrays также может содержать любой действительный элемент JSON, включая объекты, как в этом примере массива с двумя объектами (взятыми из документа RFC):

[
  {
     "precision": "zip",
     "Latitude":  37.7668,
     "Longitude": -122.3959,
     "Address":   "",
     "City":      "SAN FRANCISCO",
     "State":     "CA",
     "Zip":       "94107",
     "Country":   "US"
  },
  {
     "precision": "zip",
     "Latitude":  37.371991,
     "Longitude": -122.026020,
     "Address":   "",
     "City":      "SUNNYVALE",
     "State":     "CA",
     "Zip":       "94085",
     "Country":   "US"
  }
]

Они также могут содержать элементы со смешанными типами, например:

[
    "red",
    51,
    true,
    null,
    {
        "state": "complete"
    }
]

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

[
    1,
    2,
]

Чтобы сделать это действительным, вам нужно будет удалить запятую после последнего элемента, превратив ее в:

[
    1,
    2
]

Редактирование JSON вручную

JSON — очень строгий формат (см. Http://json.org) . Это позволяет легко анализировать и писать для машин, но удивляет людей, когда незаметные ошибки ломают документ.

Общие проблемы

Trailing Comma

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

{
  a: 1,
  b: 2,
  c: 3
}

Добавление запятой после 3 приведет к ошибке синтаксиса.

Такая же проблема возникает для массивов:

[ 
  1,
  2
]

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

Отсутствует запятая

{
  a: 1,
  b: 2,
  c: 3
  d: 4
}

Поскольку конечные запятые не допускаются, легко забыть добавить их перед добавлением нового значения (в этом случае после 3 ).

Комментарии

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

Существует несколько способов:

  • Используйте комментарии стиля C, а затем разделите их перед передачей в парсер
  • Вставить комментарии в данные
{
  "//": "comment",
  "data": 1
}
  • Вставить комментарии и переписать их с данными
{
  "data": "comment",
  "data": 1
}

Вторая запись data перезапишет комментарий в большинстве парсеров .

Решения

Чтобы упростить запись JSON, используйте IDE, которая проверяет наличие синтаксических ошибок и обеспечивает синтаксическую раскраску. Плагины доступны для большинства редакторов.

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

Оцените другие форматы, которые лучше подходят для этого использования, например:

  • Hjson , можно легко конвертировать в JSON и из него
  • TOML , подобно файлам INI
  • YAML , больше возможностей, но за счет дополнительной сложности

Обоснование для Array vs Object (т.е. когда использовать что)

Массивы JSON представляют собой совокупность объектов. В JS существует множество функций сбора, таких как slice , pop , push . Объекты имеют только более сырые данные.

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

JSONObject — это неупорядоченный набор пар имя / значение . Его внешняя форма — это строка, завернутая в фигурные скобки с двоеточиями между именами и значениями и запятыми между значениями и именами.

Object — ключ и значение, Array — цифры, строки, булевы. Когда вы используете то или это?

Вы можете думать о массивах как «is a / an», а Objects — «имеет». В качестве примера можно использовать «Фрукты». Каждый элемент в фруктовой корзине — это тип фруктов.

array fruit : [orange, mango, banana]

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

array fruit : [orange:[], mango:{}, banana:{}]

, Вы можете видеть, что оранжевый тоже массив. Это означает, что любой предмет, который идет внутри оранжевого, является оранжевым, скажем: bitter_orange, mandarin, sweet_orange.

для фруктового объекта любой предмет в нем является атрибутом плода. таким образом, у плода есть

object fruit :{seed:{}, endocarp:{},flesh:{}}

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

JSON — это прежде всего язык, который позволяет сериализовать объекты javascript в строки. Поэтому при десериализации строки JSON вы должны получить структуру объектов javascript. Если ваш json десериализуется в объект, который хранит 100 объектов, называемых object1 to object100, тогда это будет очень неудобно. Большинство десериализаторов ожидают, что у вас будут известные объекты и массивы известных объектов, чтобы они могли преобразовать строки в фактическую структуру объекта на используемом вами языке. Также возникает вопрос, что философия объектно-ориентированного проектирования ответит вам.

кредиты всем участникам Каковы различия между использованием массивов JSON и объектов JSON?

В этом уроке мы представим Формат обмена данными JSON. В этом посте рассматривается структура объекта JSON, правила синтаксиса JSON, обмен данными с JSON и поддержка языков программирования для JSON.

  • JSON это легкий, удобочитаемый формат обмена данными.
  • JSON используется для хранения collection пар имя-значение или упорядоченный список ценностей.
  • JSON полезен для сериализации objects, а также arrays для передачи по сети.
  • JSON очень легко анализировать и генерировать, и он не использует полную структуру разметки, как XML.
  • JSON стал популярной альтернативой формату XML из-за его быстрой асинхронной связи клиент-сервер.
  • Все файлы JSON имеют расширение .json.

Структура объекта JSON:

JSON может быть:

  1. Коллекция пар имя-значение:

    The имя должна быть строкой в двойных кавычках; и ценность может быть другой string, ан массив, а количество, boolean или же нулевой. Само значение может быть другим JSON object.

  2. Упорядоченная коллекция:

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

Пример JSON:

В следующем примере показано JSON-представление объекта person.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

{

    «firstName»: «John»,

    «lastName»: «Snow»,

    «age»: 25,

    «children»: [],

    «spouse»: null,

    «address»: {

        «street»: «7504 Taylor Drive»,

        «city»: «New York City»,

        «state»: «New York»,

        «postalCode»: «11238»

    },

    «phoneNumbers»: [

        {

            «type»: «mobile»,

            «number»: «212 555-3346»

        },

        {

            «type»: «fax»,

            «number»: «646 555-4567»

        }

    ]

}

 
В приведенном выше примере

  1. Первые две пары «имя-значение» сопоставляют строку с другой строкой.
  2. Третья пара имя-значение отображает строку age с номером 25.
  3. Четвертая пара «имя-значение» отображает строку children с пустым массивом [].
  4. Пятая пара имя-значение отображает строку spouse с null ценность.
  5. Шестая пара имя-значение отображает строку address с другим объектом JSON.
  6. Седьмая пара «имя-значение» отображает строку phoneNumbers с массивом объектов JSON.

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

  • JSON object окружен фигурные скобки {}.
  • Пары имя-значение сгруппированы двоеточие (:) и разделены запятая (,).
  • Ан массив начинается с левая скобка и заканчивается правая скобка [].
  • Завершающие запятые и начальные нули в числе запрещены.
  • Восьмеричный и шестнадцатеричный форматы не разрешены.
  • Each ключ внутри JSON должен быть уникальным и должен быть заключен в двойные кавычки.
  • The boolean type соответствует только двум специальным значениям: true а также false и значения NULL представлены символом null дословно (без кавычек).

Встроенная библиотека JavaScript JSON:

Встроенная библиотека JavaScript JSON предоставляет две функции для декодирования и кодирования объектов JSON: JSON.parse() а также JSON.stringify().

 
1. JSON.stringify() возвращает строку JSON, соответствующую объекту JavaScript.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<!DOCTYPE html>

<html>

<head>

    <title>Encoding a JavaScript object into a JSON string.</title>

</head>

<body>

    <div id=«json»></div>

    <script>

        var obj = {

            «fruit»: «Apple», «types»: [«Small», «Medium», «Large»], «quantity»: 1000

        };

        var json_string = JSON.stringify(obj);

        document.getElementById(«json»).innerHTML = json_string;

    </script>

</body>

</html>

 
результат:

{“fruit”:”Apple”,
“types”:[“Small”,”Medium”,”Large”],
“quantity”:1000}

 
2. JSON.parse() — это безопасный и быстрый метод декодирования строки JSON как объекта JavaScript.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<!DOCTYPE html>

<html>

<body>

    <h2>Decoding a JSON string into a JavaScript object.</h2>

    <div id=«json»></div>

    <script>

        var json_str = ‘{«fruit»:»Apple»,»types»:[«Small»,»Medium»,»Large»],»quantity»:1000}’;

        try {

            var obj = JSON.parse(json_string);

            document.getElementById(«json»).innerHTML = obj.fruit + «, [« + obj.types + «], «

                                                        + obj.quantity;

        } catch (e) {

            alert(«Cannot parse given string»);

        }

    </script>

</body>

</html>

 
результат:

Apple,
[Small,Medium,Large],
1000

 
Мы также можем преобразовать строку JSON в объект JavaScript, вызвав метод eval() функцию в строке JSON, заключенной в круглые скобки. Это работает, поскольку JSON является производным от JavaScript. eval() это злая функция, которой следует избегать любой ценой. Это потому что eval может выполнять любые вредоносные сценарии на компьютере пользователя с привилегиями вызывающего. Более того, вредоносный код может найти область, в которой eval() был вызван, что сделало веб-сайт уязвимым для атак. JSON.parse() — это безопасная и быстрая альтернатива eval, которая безопасно не работает с вредоносным кодом. JSON включен практически во все современные браузеры. Для старых версий браузеров используйте внешнюю библиотеку JavaScript, например json2.js Дугласа Крокфорда.

Обмен данными с JSON:

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

  1. Отправка данных:

    На стороне клиента объект JavaScript сначала преобразуется в строку JSON с помощью JSON.stringify() метод. И результирующая строка затем передается на сервер в теле запроса или параметре.

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

    Сервер может вернуть другую строку JSON в качестве ответа. Любой JSON, полученный с сервера, может быть преобразован в объекты JavaScript с помощью JSON.parse() метод.

Официальный тип носителя для JSON: application/json.

Поддержка языков программирования:

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

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

 
Полезные ссылки:

  1. Валидатор JSON
  2. Форматировщик JSON
  3. Минификатор JSON
  4. Редактор JSON
  5. JSON в XML
  6. JSON в YAML
  7. JSON в CSV

JSON — Overview

JSON or JavaScript Object Notation is a lightweight text-based open standard designed for human-readable data interchange. Conventions used by JSON are known to programmers, which include C, C++, Java, Python, Perl, etc.

  • JSON stands for JavaScript Object Notation.

  • The format was specified by Douglas Crockford.

  • It was designed for human-readable data interchange.

  • It has been extended from the JavaScript scripting language.

  • The filename extension is .json.

  • JSON Internet Media type is application/json.

  • The Uniform Type Identifier is public.json.

Uses of JSON

  • It is used while writing JavaScript based applications that includes browser extensions and websites.

  • JSON format is used for serializing and transmitting structured data over network connection.

  • It is primarily used to transmit data between a server and web applications.

  • Web services and APIs use JSON format to provide public data.

  • It can be used with modern programming languages.

Characteristics of JSON

  • JSON is easy to read and write.
  • It is a lightweight text-based interchange format.
  • JSON is language independent.

Simple Example in JSON

The following example shows how to use JSON to store information related to books based on their topic and edition.

{
   "book": [
	
      {
         "id":"01",
         "language": "Java",
         "edition": "third",
         "author": "Herbert Schildt"
      },
	
      {
         "id":"07",
         "language": "C++",
         "edition": "second",
         "author": "E.Balagurusamy"
      }
   ]
}

After understanding the above program, we will try another example. Let’s save the below code as json.htm

<html>
   <head>
      <title>JSON example</title>
      <script language = "javascript" >
         var object1 = { "language" : "Java", "author"  : "herbert schildt" };
         document.write("<h1>JSON with JavaScript example</h1>");
         document.write("<br>");
         document.write("<h3>Language = " + object1.language+"</h3>");  
         document.write("<h3>Author = " + object1.author+"</h3>");   

         var object2 = { "language" : "C++", "author"  : "E-Balagurusamy" };
         document.write("<br>");
         document.write("<h3>Language = " + object2.language+"</h3>");  
         document.write("<h3>Author = " + object2.author+"</h3>");   
  
         document.write("<hr />");
         document.write(object2.language + " programming language can be studied " + "from book written by " + object2.author);
         document.write("<hr />");
      </script>
   </head>
   
   <body>
   </body>
</html>

Now let’s try to open json.htm using IE or any other javascript enabled browser that produces the following result −

json example demo

You can refer to JSON Objects chapter for more information on JSON objects.

JSON — Syntax

Let’s have a quick look at the basic syntax of JSON. JSON syntax is basically considered as a subset of JavaScript syntax; it includes the following −

  • Data is represented in name/value pairs.

  • Curly braces hold objects and each name is followed by ‘:'(colon), the name/value pairs are separated by , (comma).

  • Square brackets hold arrays and values are separated by ,(comma).

Below is a simple example −

{
   "book": [

      {
         "id": "01",
         "language": "Java",
         "edition": "third",
         "author": "Herbert Schildt"
      },

      {
         "id": "07",
         "language": "C++",
         "edition": "second",
         "author": "E.Balagurusamy"
      }

   ]
}

JSON supports the following two data structures −

  • Collection of name/value pairs − This Data Structure is supported by different programming languages.

  • Ordered list of values − It includes array, list, vector or sequence etc.

JSON — DataTypes

JSON format supports the following data types −

Sr.No. Type & Description
1

Number

double- precision floating-point format in JavaScript

2

String

double-quoted Unicode with backslash escaping

3

Boolean

true or false

4

Array

an ordered sequence of values

5

Value

it can be a string, a number, true or false, null etc

6

Object

an unordered collection of key:value pairs

7

Whitespace

can be used between any pair of tokens

8

null

empty

Number

  • It is a double precision floating-point format in JavaScript and it depends on implementation.

  • Octal and hexadecimal formats are not used.

  • No NaN or Infinity is used in Number.

The following table shows the number types −

Sr.No. Type & Description
1

Integer

Digits 1-9, 0 and positive or negative

2

Fraction

Fractions like .3, .9

3

Exponent

Exponent like e, e+, e-, E, E+, E-

Syntax

var json-object-name = { string : number_value, .......}

Example

Example showing Number Datatype, value should not be quoted −

var obj = {marks: 97}

String

  • It is a sequence of zero or more double quoted Unicode characters with backslash escaping.

  • Character is a single character string i.e. a string with length 1.

The table shows various special characters that you can use in strings of a JSON document −

Sr.No. Type & Description
1

«

double quotation

2

backslash

3

/

forward slash

4

b

backspace

5

f

form feed

6

n

new line

7

r

carriage return

8

t

horizontal tab

9

u

four hexadecimal digits

Syntax

var json-object-name = { string : "string value", .......}

Example

Example showing String Datatype −

var obj = {name: 'Amit'}

Boolean

It includes true or false values.

Syntax

var json-object-name = { string : true/false, .......}

Example

var obj = {name: 'Amit', marks: 97, distinction: true}

Array

  • It is an ordered collection of values.

  • These are enclosed in square brackets which means that array begins with .[. and ends with .]..

  • The values are separated by , (comma).

  • Array indexing can be started at 0 or 1.

  • Arrays should be used when the key names are sequential integers.

Syntax

[ value, .......]

Example

Example showing array containing multiple objects −

{
   "books": [
      { "language":"Java" , "edition":"second" },
      { "language":"C++" , "lastName":"fifth" },
      { "language":"C" , "lastName":"third" }
   ]
}

Object

  • It is an unordered set of name/value pairs.

  • Objects are enclosed in curly braces that is, it starts with ‘{‘ and ends with ‘}’.

  • Each name is followed by ‘:'(colon) and the key/value pairs are separated by , (comma).

  • The keys must be strings and should be different from each other.

  • Objects should be used when the key names are arbitrary strings.

Syntax

{ string : value, .......}

Example

Example showing Object −

{
   "id": "011A",
   "language": "JAVA",
   "price": 500,
}

Whitespace

It can be inserted between any pair of tokens. It can be added to make a code more readable. Example shows declaration with and without whitespace −

Syntax

{string:" ",....}

Example

var obj1 = {"name": "Sachin Tendulkar"}
var obj2 = {"name": "SauravGanguly"}

null

It means empty type.

Syntax

null

Example

var i = null;

if(i == 1) {
   document.write("<h1>value is 1</h1>");
} else {
   document.write("<h1>value is null</h1>");
}

JSON Value

It includes −

  • number (integer or floating point)
  • string
  • boolean
  • array
  • object
  • null

Syntax

String | Number | Object | Array | TRUE | FALSE | NULL

Example

var i = 1;
var j = "sachin";
var k = null;

JSON — Objects

Creating Simple Objects

JSON objects can be created with JavaScript. Let us see the various ways of creating JSON objects using JavaScript −

  • Creation of an empty Object −
var JSONObj = {};
  • Creation of a new Object −
var JSONObj = new Object();
  • Creation of an object with attribute bookname with value in string, attribute price with numeric value. Attribute is accessed by using ‘.’ Operator −

var JSONObj = { "bookname ":"VB BLACK BOOK", "price":500 };

This is an example that shows creation of an object in javascript using JSON, save the below code as json_object.htm

<html>
   <head>
      <title>Creating Object JSON with JavaScript</title>
      <script language = "javascript" >
         var JSONObj = { "name" : "tutorialspoint.com", "year"  : 2005 };
		
         document.write("<h1>JSON with JavaScript example</h1>");
         document.write("<br>");
         document.write("<h3>Website Name = "+JSONObj.name+"</h3>");  
         document.write("<h3>Year = "+JSONObj.year+"</h3>");  
      </script>
   </head>
   
   <body>
   </body>	
</html>

Now let’s try to open Json Object using IE or any other javaScript enabled browser. It produces the following result −

Json Objects

Creating Array Objects

The following example shows creation of an array object in javascript using JSON, save the below code as json_array_object.htm

<html>
   <head>
      <title>Creation of array object in javascript using JSON</title>
      <script language = "javascript" >
         document.writeln("<h2>JSON array object</h2>");
         var books = { "Pascal" : [ 
            { "Name"  : "Pascal Made Simple", "price" : 700 },
            { "Name"  : "Guide to Pascal", "price" : 400 }],  
				
            "Scala"  : [
               { "Name"  : "Scala for the Impatient", "price" : 1000 }, 
               { "Name"  : "Scala in Depth", "price" : 1300 }]    
         }    
         var i = 0
         document.writeln("<table border = '2'><tr>");
			
         for(i = 0;i<books.Pascal.length;i++) {	
            document.writeln("<td>");
            document.writeln("<table border = '1' width = 100 >");
            document.writeln("<tr><td><b>Name</b></td><td width = 50>" + books.Pascal[i].Name+"</td></tr>");
            document.writeln("<tr><td><b>Price</b></td><td width = 50>" + books.Pascal[i].price +"</td></tr>");
            document.writeln("</table>");
            document.writeln("</td>");
         }

         for(i = 0;i<books.Scala.length;i++) {
            document.writeln("<td>");
            document.writeln("<table border = '1' width = 100 >");
            document.writeln("<tr><td><b>Name</b></td><td width = 50>" + books.Scala[i].Name+"</td></tr>");
            document.writeln("<tr><td><b>Price</b></td><td width = 50>" + books.Scala[i].price+"</td></tr>");
            document.writeln("</table>");
            document.writeln("</td>");
         }
			
         document.writeln("</tr></table>");
      </script>
   </head>
   
   <body>
   </body>
</html>

Now let’s try to open Json Array Object using IE or any other javaScript enabled browser. It produces the following result −

json array objects

JSON — Schema

JSON Schema is a specification for JSON based format for defining the structure of JSON data. It was written under IETF draft which expired in 2011. JSON Schema −

  • Describes your existing data format.
  • Clear, human- and machine-readable documentation.
  • Complete structural validation, useful for automated testing.
  • Complete structural validation, validating client-submitted data.

JSON Schema Validation Libraries

There are several validators currently available for different programming languages. Currently the most complete and compliant JSON Schema validator available is JSV.

Languages Libraries
C WJElement (LGPLv3)
Java json-schema-validator (LGPLv3)
.NET Json.NET (MIT)
ActionScript 3 Frigga (MIT)
Haskell aeson-schema (MIT)
Python Jsonschema
Ruby autoparse (ASL 2.0); ruby-jsonschema (MIT)
PHP php-json-schema (MIT). json-schema (Berkeley)
JavaScript Orderly (BSD); JSV; json-schema; Matic (MIT); Dojo; Persevere (modified BSD or AFL 2.0); schema.js.

JSON Schema Example

Given below is a basic JSON schema, which covers a classical product catalog description −

{
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Product",
   "description": "A product from Acme's catalog",
   "type": "object",
	
   "properties": {
	
      "id": {
         "description": "The unique identifier for a product",
         "type": "integer"
      },
		
      "name": {
         "description": "Name of the product",
         "type": "string"
      },
		
      "price": {
         "type": "number",
         "minimum": 0,
         "exclusiveMinimum": true
      }
   },
	
   "required": ["id", "name", "price"]
}

Let’s the check various important keywords that can be used in this schema −

Sr.No. Keyword & Description
1

$schema

The $schema keyword states that this schema is written according to the draft v4 specification.

2

title

You will use this to give a title to your schema.

3

description

A little description of the schema.

4

type

The type keyword defines the first constraint on our JSON data: it has to be a JSON Object.

5

properties

Defines various keys and their value types, minimum and maximum values to be used in JSON file.

6

required

This keeps a list of required properties.

7

minimum

This is the constraint to be put on the value and represents minimum acceptable value.

8

exclusiveMinimum

If «exclusiveMinimum» is present and has boolean value true, the instance is valid if it is strictly greater than the value of «minimum».

9

maximum

This is the constraint to be put on the value and represents maximum acceptable value.

10

exclusiveMaximum

If «exclusiveMaximum» is present and has boolean value true, the instance is valid if it is strictly lower than the value of «maximum».

11

multipleOf

A numeric instance is valid against «multipleOf» if the result of the division of the instance by this keyword’s value is an integer.

12

maxLength

The length of a string instance is defined as the maximum number of its characters.

13

minLength

The length of a string instance is defined as the minimum number of its characters.

14

pattern

A string instance is considered valid if the regular expression matches the instance successfully.

You can check a http://json-schema.org for the complete list of keywords that can be used in defining a JSON schema. The above schema can be used to test the validity of the following JSON code −

[
   {
      "id": 2,
      "name": "An ice sculpture",
      "price": 12.50,
   },
	
   {
      "id": 3,
      "name": "A blue mouse",
      "price": 25.50,
   }
]

JSON — Comparison with XML

JSON and XML are human readable formats and are language independent. They both have support for creation, reading and decoding in real world situations. We can compare JSON with XML, based on the following factors −

Verbose

XML is more verbose than JSON, so it is faster to write JSON for programmers.

Arrays Usage

XML is used to describe the structured data, which doesn’t include arrays whereas JSON include arrays.

Parsing

JavaScript’s eval method parses JSON. When applied to JSON, eval returns the described object.

Example

Individual examples of XML and JSON −

JSON

{
   "company": Volkswagen,
   "name": "Vento",
   "price": 800000
}

XML

<car>
   <company>Volkswagen</company>
   <name>Vento</name>
   <price>800000</price>
</car>

JSON with PHP

This chapter covers how to encode and decode JSON objects using PHP programming language. Let’s start with preparing the environment to start our programming with PHP for JSON.

Environment

As of PHP 5.2.0, the JSON extension is bundled and compiled into PHP by default.

JSON Functions

Function Libraries
json_encode Returns the JSON representation of a value.
json_decode Decodes a JSON string.
json_last_error Returns the last error occurred.

Encoding JSON in PHP (json_encode)

PHP json_encode() function is used for encoding JSON in PHP. This function returns the JSON representation of a value on success or FALSE on failure.

Syntax

string json_encode ( $value [, $options = 0 ] )

Parameters

  • value − The value being encoded. This function only works with UTF-8 encoded data.

  • options − This optional value is a bitmask consisting of JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT.

Example

The following example shows how to convert an array into JSON with PHP −

<?php
   $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
   echo json_encode($arr);
?>

While executing, this will produce the following result −

{"a":1,"b":2,"c":3,"d":4,"e":5}

The following example shows how the PHP objects can be converted into JSON −

<?php
   class Emp {
      public $name = "";
      public $hobbies  = "";
      public $birthdate = "";
   }
	
   $e = new Emp();
   $e->name = "sachin";
   $e->hobbies  = "sports";
   $e->birthdate = date('m/d/Y h:i:s a', "8/5/1974 12:20:03 p");
   $e->birthdate = date('m/d/Y h:i:s a', strtotime("8/5/1974 12:20:03"));

   echo json_encode($e);
?>

While executing, this will produce the following result −

{"name":"sachin","hobbies":"sports","birthdate":"08/05/1974 12:20:03 pm"}

Decoding JSON in PHP (json_decode)

PHP json_decode() function is used for decoding JSON in PHP. This function returns the value decoded from json to appropriate PHP type.

Syntax

mixed json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])

Paramaters

  • json_string − It is an encoded string which must be UTF-8 encoded data.

  • assoc − It is a boolean type parameter, when set to TRUE, returned objects will be converted into associative arrays.

  • depth − It is an integer type parameter which specifies recursion depth

  • options − It is an integer type bitmask of JSON decode, JSON_BIGINT_AS_STRING is supported.

Example

The following example shows how PHP can be used to decode JSON objects −

<?php
   $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

   var_dump(json_decode($json));
   var_dump(json_decode($json, true));
?>

While executing, it will produce the following result −

object(stdClass)#1 (5) {
   ["a"] => int(1)
   ["b"] => int(2)
   ["c"] => int(3)
   ["d"] => int(4)
   ["e"] => int(5)
}

array(5) {
   ["a"] => int(1)
   ["b"] => int(2)
   ["c"] => int(3)
   ["d"] => int(4)
   ["e"] => int(5)
}

JSON with Perl

This chapter covers how to encode and decode JSON objects using Perl programming language. Let’s start with preparing the environment to start our programming with Perl for JSON.

Environment

Before you start encoding and decoding JSON using Perl, you need to install JSON module, which can be obtained from CPAN. Once you downloaded JSON-2.53.tar.gz or any other latest version, follow the steps mentioned below −

$tar xvfz JSON-2.53.tar.gz
$cd JSON-2.53
$perl Makefile.PL
$make
$make install

JSON Functions

Function Libraries
encode_json Converts the given Perl data structure to a UTF-8 encoded, binary string.
decode_json Decodes a JSON string.
to_json Converts the given Perl data structure to a json string.
from_json Expects a json string and tries to parse it, returning the resulting reference.
convert_blessed Use this function with true value so that Perl can use TO_JSON method on the object’s class to convert an object into JSON.

Encoding JSON in Perl (encode_json)

Perl encode_json() function converts the given Perl data structure to a UTF-8 encoded, binary string.

Syntax

$json_text = encode_json ($perl_scalar );
or
$json_text = JSON->new->utf8->encode($perl_scalar);

Example

The following example shows arrays under JSON with Perl −

#!/usr/bin/perl
use JSON;

my %rec_hash = ('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
my $json = encode_json %rec_hash;
print "$jsonn";

While executing, this will produce the following result −

{"e":5,"c":3,"a":1,"b":2,"d":4}

The following example shows how Perl objects can be converted into JSON −

#!/usr/bin/perl

package Emp;
sub new {
   my $class = shift;
	
   my $self = {
      name => shift,
      hobbies  => shift,
      birthdate  => shift,
   };
	
   bless $self, $class;
   return $self;
}

sub TO_JSON { return { %{ shift() } }; }

package main;
use JSON;

my $JSON = JSON->new->utf8;
$JSON->convert_blessed(1);

$e = new Emp( "sachin", "sports", "8/5/1974 12:20:03 pm");
$json = $JSON->encode($e);
print "$jsonn";

On executing, it will produce the following result −

{"birthdate":"8/5/1974 12:20:03 pm","name":"sachin","hobbies":"sports"}

Decoding JSON in Perl (decode_json)

Perl decode_json() function is used for decoding JSON in Perl. This function returns the value decoded from json to an appropriate Perl type.

Syntax

$perl_scalar = decode_json $json_text
or
$perl_scalar = JSON->new->utf8->decode($json_text)

Example

The following example shows how Perl can be used to decode JSON objects. Here you will need to install Data::Dumper module if you already do not have it on your machine.

#!/usr/bin/perl
use JSON;
use Data::Dumper;

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

$text = decode_json($json);
print  Dumper($text);

On executing, it will produce following result −

$VAR1 = {
   'e' => 5,
   'c' => 3,
   'a' => 1,
   'b' => 2,
   'd' => 4
};

JSON with Python

This chapter covers how to encode and decode JSON objects using Python programming language. Let’s start with preparing the environment to start our programming with Python for JSON.

Environment

Before you start with encoding and decoding JSON using Python, you need to install any of the JSON modules available. For this tutorial we have downloaded and installed Demjson as follows −

$tar xvfz demjson-1.6.tar.gz
$cd demjson-1.6
$python setup.py install

JSON Functions

Function Libraries
encode Encodes the Python object into a JSON string representation.
decode Decodes a JSON-encoded string into a Python object.

Encoding JSON in Python (encode)

Python encode() function encodes the Python object into a JSON string representation.

Syntax

demjson.encode(self, obj, nest_level=0)

Example

The following example shows arrays under JSON with Python.

#!/usr/bin/python
import demjson

data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]

json = demjson.encode(data)
print json

While executing, this will produce the following result −

[{"a":1,"b":2,"c":3,"d":4,"e":5}]

Decoding JSON in Python (decode)

Python can use demjson.decode() function for decoding JSON. This function returns the value decoded from json to an appropriate Python type.

Syntax

demjson.decode(self, txt)

Example

The following example shows how Python can be used to decode JSON objects.

#!/usr/bin/python
import demjson

json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

text = demjson.decode(json)
print  text

On executing, it will produce the following result −

{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}

JSON with Ruby

This chapter covers how to encode and decode JSON objects using Ruby programming language. Let’s start with preparing the environment to start our programming with Ruby for JSON.

Environment

Before you start with encoding and decoding JSON using Ruby, you need to install any of the JSON modules available for Ruby. You may need to install Ruby gem, but if you are running latest version of Ruby then you must have gem already installed on your machine, otherwise let’s follow the following single step assuming you already have gem installed −

$gem install json

Parsing JSON using Ruby

The following example shows that the first 2 keys hold string values and the last 3 keys hold arrays of strings. Let’s keep the following content in a file called input.json.

{
   "President": "Alan Isaac",
   "CEO": "David Richardson",
  
   "India": [
      "Sachin Tendulkar",
      "Virender Sehwag",
      "Gautam Gambhir"
   ],

   "Srilanka": [
      "Lasith Malinga",
      "Angelo Mathews",
      "Kumar Sangakkara"
   ],

   "England": [
      "Alastair Cook",
      "Jonathan Trott",
      "Kevin Pietersen"
   ]
	
}

Given below is a Ruby program that will be used to parse the above mentioned JSON document −

#!/usr/bin/ruby
require 'rubygems'
require 'json'
require 'pp'

json = File.read('input.json')
obj = JSON.parse(json)

pp obj

On executing, it will produce the following result −

{
   "President"=>"Alan Isaac",
   "CEO"=>"David Richardson",

   "India"=>
   ["Sachin Tendulkar", "Virender Sehwag", "Gautam Gambhir"],

   "Srilanka"=>
   ["Lasith Malinga ", "Angelo Mathews", "Kumar Sangakkara"],

   "England"=>
   ["Alastair Cook", "Jonathan Trott", "Kevin Pietersen"]
}

JSON with Java

This chapter covers how to encode and decode JSON objects using Java programming language. Let’s start with preparing the environment to start our programming with Java for JSON.

Environment

Before you start with encoding and decoding JSON using Java, you need to install any of the JSON modules available. For this tutorial we have downloaded and installed JSON.simple and have added the location of json-simple-1.1.1.jar file to the environment variable CLASSPATH.

Mapping between JSON and Java entities

JSON.simple maps entities from the left side to the right side while decoding or parsing, and maps entities from the right to the left while encoding.

JSON Java
string java.lang.String
number java.lang.Number
true|false java.lang.Boolean
null null
array java.util.List
object java.util.Map

On decoding, the default concrete class of java.util.List is org.json.simple.JSONArray and the default concrete class of java.util.Map is org.json.simple.JSONObject.

Encoding JSON in Java

Following is a simple example to encode a JSON object using Java JSONObject which is a subclass of java.util.HashMap. No ordering is provided. If you need the strict ordering of elements, use JSONValue.toJSONString ( map ) method with ordered map implementation such as java.util.LinkedHashMap.

import org.json.simple.JSONObject;

class JsonEncodeDemo {

   public static void main(String[] args) {
      JSONObject obj = new JSONObject();

      obj.put("name", "foo");
      obj.put("num", new Integer(100));
      obj.put("balance", new Double(1000.21));
      obj.put("is_vip", new Boolean(true));

      System.out.print(obj);
   }
}

On compiling and executing the above program the following result will be generated −

{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}

Following is another example that shows a JSON object streaming using Java JSONObject −

import org.json.simple.JSONObject;

class JsonEncodeDemo {

   public static void main(String[] args) {
	
      JSONObject obj = new JSONObject();

      obj.put("name","foo");
      obj.put("num",new Integer(100));
      obj.put("balance",new Double(1000.21));
      obj.put("is_vip",new Boolean(true));

      StringWriter out = new StringWriter();
      obj.writeJSONString(out);
      
      String jsonText = out.toString();
      System.out.print(jsonText);
   }
}

On compiling and executing the above program, the following result is generated −

{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}

Decoding JSON in Java

The following example makes use of JSONObject and JSONArray where JSONObject is a java.util.Map and JSONArray is a java.util.List, so you can access them with standard operations of Map or List.

import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;

class JsonDecodeDemo {

   public static void main(String[] args) {
	
      JSONParser parser = new JSONParser();
      String s = "[0,{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}]";
		
      try{
         Object obj = parser.parse(s);
         JSONArray array = (JSONArray)obj;
			
         System.out.println("The 2nd element of array");
         System.out.println(array.get(1));
         System.out.println();

         JSONObject obj2 = (JSONObject)array.get(1);
         System.out.println("Field "1"");
         System.out.println(obj2.get("1"));    

         s = "{}";
         obj = parser.parse(s);
         System.out.println(obj);

         s = "[5,]";
         obj = parser.parse(s);
         System.out.println(obj);

         s = "[5,,2]";
         obj = parser.parse(s);
         System.out.println(obj);
      }catch(ParseException pe) {
		
         System.out.println("position: " + pe.getPosition());
         System.out.println(pe);
      }
   }
}

On compiling and executing the above program, the following result will be generated −

The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}

Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]

JSON with Ajax

AJAX is Asynchronous JavaScript and XML, which is used on the client side as a group of interrelated web development techniques, in order to create asynchronous web applications. According to the AJAX model, web applications can send and retrieve data from a server asynchronously without interfering with the display and the behavior of the existing page.

Many developers use JSON to pass AJAX updates between the client and the server. Websites updating live sports scores can be considered as an example of AJAX. If these scores have to be updated on the website, then they must be stored on the server so that the webpage can retrieve the score when it is required. This is where we can make use of JSON formatted data.

Any data that is updated using AJAX can be stored using the JSON format on the web server. AJAX is used so that javascript can retrieve these JSON files when necessary, parse them, and perform one of the following operations −

  • Store the parsed values in the variables for further processing before displaying them on the webpage.

  • It directly assigns the data to the DOM elements in the webpage, so that they are displayed on the website.

Example

The following code shows JSON with AJAX. Save it as ajax.htm file. Here the loading function loadJSON() is used asynchronously to upload JSON data.

<html>
   <head>
      <meta content = "text/html; charset = ISO-8859-1" http-equiv = "content-type">
		
      <script type = "application/javascript">
         function loadJSON() {
            var data_file = "http://www.tutorialspoint.com/json/data.json";
            var http_request = new XMLHttpRequest();
            try{
               // Opera 8.0+, Firefox, Chrome, Safari
               http_request = new XMLHttpRequest();
            }catch (e) {
               // Internet Explorer Browsers
               try{
                  http_request = new ActiveXObject("Msxml2.XMLHTTP");
					
               }catch (e) {
				
                  try{
                     http_request = new ActiveXObject("Microsoft.XMLHTTP");
                  }catch (e) {
                     // Something went wrong
                     alert("Your browser broke!");
                     return false;
                  }
					
               }
            }
			
            http_request.onreadystatechange = function() {
			
               if (http_request.readyState == 4  ) {
                  // Javascript function JSON.parse to parse JSON data
                  var jsonObj = JSON.parse(http_request.responseText);

                  // jsonObj variable now contains the data structure and can
                  // be accessed as jsonObj.name and jsonObj.country.
                  document.getElementById("Name").innerHTML = jsonObj.name;
                  document.getElementById("Country").innerHTML = jsonObj.country;
               }
            }
			
            http_request.open("GET", data_file, true);
            http_request.send();
         }
		
      </script>
	
      <title>tutorialspoint.com JSON</title>
   </head>
	
   <body>
      <h1>Cricketer Details</h1>
		
      <table class = "src">
         <tr><th>Name</th><th>Country</th></tr>
         <tr><td><div id = "Name">Sachin</div></td>
         <td><div id = "Country">India</div></td></tr>
      </table>

      <div class = "central">
         <button type = "button" onclick = "loadJSON()">Update Details </button>
      </div>
		
   </body>
		
</html>

Given below is the input file data.json, having data in JSON format which will be uploaded asynchronously when we click the Update Detail button. This file is being kept in http://www.tutorialspoint.com/json/

{"name": "Brett", "country": "Australia"}

The above HTML code will generate the following screen, where you can check AJAX in action −

Cricketer Details

Name Country

Sachin

India

When you click on the Update Detail button, you should get a result something as follows. You can try JSON with AJAX yourself, provided your browser supports Javascript.

Cricketer Details

Name Country

Brett

Australia

Понравилась статья? Поделить с друзьями:
  • Как найти потерянную иголку дома быстро
  • Как найти ближайшее число к числу
  • Как найти старую страницу в знакомствах
  • Как найти пропавшего ребенка в москве
  • Как найти свой айпад с компьютера