Введение в JSON. JavaScript - JSON и методы работы с ним Пример использования json

JSON (JavaScript Object Notation) – это формат передачи данных. Из названия видно, что формат основан на языке программирования JavaScript, однако он доступен и в других языках (Python, Ruby, PHP, Java).

JSON использует расширение.json. При использовании его в других файловых форматах (например, .html) строка JSON берётся в кавычки или присваивается переменной. Этот формат легко передаётся между веб-сервером и клиентом или браузером.

Легковесный и простой для восприятия JSON – отличная альтернатива XML.

Данное руководство ознакомит вас с преимуществами, объектами, общей структурой и синтаксисом JSON.

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

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

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

"first_name" : "John",
"last_name" : "Smith",
"location" : "London",
"online" : true,
"followers" : 987

Это очень простой пример. Объект JSON может содержать множество строк.

Как видите, объект состоит из пар «ключ-значение», которые заключены в фигурные скобки. Большая часть данных в JSON записывается в виде объектов.

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

"key" : "value", "key" : "value", "key": "value"

Ключ в JSON находится слева. Ключ нужно помещать в двойные кавычки. В качестве ключа можно использовать любую валидную строку. В рамках одного объекта все ключи должны быть уникальны. Ключ может содержать пробел («first name»), но при программировании могут возникнуть проблемы с доступом к такому ключу. Потому вместо пробела лучше использовать подчеркивание («first_name»).

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

  • Строки
  • Числа
  • Объекты
  • Массивы
  • Логические данные (true или false)

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

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

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

{ "first_name" : "John", "last_name": "Smith", "online" : true, }

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

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

"first_name" : "John",
"last_name" : "Smith",
"online" : true

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

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

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

Сложные типы в JSON

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

Вложенные объекты

Ниже вы найдёте пример – файл users.json, в котором содержатся данные о пользователях. Для каждого пользователя

(«john», «jesse», «drew», «jamie») в качестве значения передаётся вложенный объект, который, в свою очередь, тоже состоит из ключей и значений.

Примечание : Первый вложенный объект JSON выделен красным.

" john" : {
"username" : " John",
"location" : "London",
"online" : true,
"followers" : 987

"jesse" : {
"username" : "Jesse",
"location" : "Washington",
"online" : false,
"followers" : 432

"drew" : {
"username" : "Drew",
"location" : "Paris",
"online" : false,
"followers" : 321

"jamie" : {
"username" : "Jamie",
"location" : "Berlin",
"online" : true,
"followers" : 654

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

Вложенные массивы

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

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

{
"first_name" : "John",
"last_name" : "Smith",
"location" : "London",
"websites" : [

"description" : "work",
"URL" : "https://www.johnsmithsite.com/"

},
{

"desciption" : "tutorials",
"URL" : "https://www.johnsmithsite.com/tutorials"

"social_media" : [

"description" : "twitter",
"link" : "https://twitter.com/johnsmith"

"description" : "facebook",
"link" : "https://www.facebook.com/johnsmith"

"description" : "github",
"link" : "https://github.com/johnsmith"

Ключам «websites» и «social_media» в качестве значений присвоены массивы, которые помещаются в квадратные скобки.

При помощи вложенных массивов и объектов можно создать сложную иерархию данных.

JSON или XML?

XML (eXtensible Markup Language) позволяет хранить данные в удобном для восприятия человека и машины виде. Формат XML поддерживается большим количеством языков программирования.

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

Давайте сравним два файла: они содержат одинаковые данные, но первый написан в формате XML, а второй в JSON.

users.xml

John London

Jesse Washington

Drew Paris

Jamie Berlin

users.json
{"users": [

{"username" : "John", "location" : "London"},
{"username" : "Jesse", "location" : "Washington"},
{"username" : "Drew", "location" : "Paris"},
{"username" : "JamieMantisShrimp", "location" : "Berlin"}

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

Если вы знакомы с HTML, вы заметили, что формат XML очень похож на него (в частности тегами). JSON проще, требует меньше текста и его проще использовать, например, в приложениях AJAX.

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

Инструменты для JSON

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

Больше информации о совместимости и обработке JSON можно найти на сайте проекта и в библиотеке jQuery .

Писать JSON с нуля приходится редко. Обычно данные загружаются из исходников или преобразовываются в JSON. Вы можете преобразовать CSV или данные с разделителями табуляцией в JSON с помощью открытого инструмента Mr. Data Converter . Чтобы преобразовать XML в JSON и наоборот, используйте utilities-online.info . При работе с автоматическими инструментами обязательно проверяйте результат.

Файлы JSON (в том числе и преобразованные данные) можно проверить с помощью сервиса JSONLint . Чтобы протестировать JSON в контексте веб-разработки, обратитесь к JSFiddle .

Заключение

JSON – простой и легковесный формат данных. Файлы JSON легко передавать, хранить и использовать.

Сегодня JSON часто используется в API.

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

По сути формат JSON представляет собою обычную строку.

Синтаксис JSON

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

Типы данных JSON

В JSON типы данных можно разделить на две категории: простые и сложные.

  • string – текстовые строки (обычно их называют просто – строки)
  • number – числа
  • boolean – логические (булевы) значения
  • null

К сложным типам относятся:

  • object – объекты
  • array – массивы

Синтаксис JSON заимствован из JavaScript, поэтому для представления значений простых и сложных типов используется тот же синтаксис, что и в JavaScript.

Простые значения

Простейший пример JSON-кода – любое значение простого типа:

5 2.3 "Hello!" true null

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

Объекты

Объект JSON представляет собой заключённый в фигурные скобки список из нуля или более свойств (пар "имя": значение), разделённых запятыми. Имена свойств объектов обязательно должны быть заключены в двойные кавычки. Отсутствие двойных кавычек или использование одинарных кавычек в имени свойства является ошибкой. Свойства могут содержать значения любого типа (простого или сложного):

{ "name": "Гомэр", "age": 40, "work": { "place": "Атомная станция", "location": "Спрингфилд" } }

Массивы

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

[ { "name": "Гомэр", "age": 40, "work": { "place": "Атомная станция", "location": "Спрингфилд" }, "children": [ "Барт", "Лиза", "Мэги" ] }, { "name": "Мардж", "age": 37, "work": { "place": "Дом", "location": "Спрингфилд" }, "children": [ "Барт", "Лиза", "Мэги" ] } ]

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

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

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

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

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

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

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

пример

"firstName":"John"

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

Значения JSON

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

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

Объекты JSON

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

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

пример

{"firstName":"John", "lastName":"Doe"}

Массивы JSON

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

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

пример

"employees":[

{"firstName":"Peter","lastName":"Jones"}
]

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

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

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

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

пример

var employees = [
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter","lastName": "Jones"}
];

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

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

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

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

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

файлы в формате JSON

  • Тип файла для JSON файлов ".json"
  • Тип MIME для JSON текста "application/json"

Переменные, массивы и объекты - привычная и удобная форма представления данных. Описывать данные принято в языке браузера JavaScript, что делать не обязательно в языке сервера PHP. Формат JSON позволяет обобщить их в одно целое и не делать акцент на языке программирования. При этом данные превращаются в пары: "имя = значение". Значение в каждой из них также может быть совокупностью таких пар.

Принято JSON ассоциировать с фигурными скобками и Последнее вполне обосновано, так как формат JSON = Object Notation JavaScript. В последние особенно динамичные годы многое изменилось. Что создавалось ради конкретной цели, часто приносило неожиданные плоды или открывало новые горизонты.

Обмен данными: браузер - сервер

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

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

Так как контент страниц современных сайтов действительно стал «массивным» (объемным), то и эффективность формата для обмена данными приобрела особое значение. Нельзя сказать, что JSON стал новым представлением данных, но то что он давно был элементом синтаксиса JavaScript, имеет существенное значение.

Использование кириллицы в именовании переменных - очень неожиданное явление (нонсенс), но это работает в последних версиях Chrome, Firefox и, даже, в Internet Explorer 11.

Кириллица и JSON

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

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

Не важно, какое именно имело под собой основание синтаксическое новшество - JSON, важно, что оно дало законное право и реальную возможность поставить соответствие: "любое имя = любое значение".

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

PHP и JSON

Принимая данные в формате JSON, сервер (посредством PHP, в частности) предоставляет возможность их обрабатывать как есть и возвращать обратно в браузер результат в аналогичном формате. Исходный массив PHP:

  • $cJSON = array ("a"=> "alfa", "b"=> "beta", "g"=> "gamma").

Преобразование в формат JSON для передачи в браузер:

  • $cJS = json_encode($cJSON ).

Результат:

  • {"a":"alfa","b":"beta","g":"gamma"}.

Допускается изображенная на фото вложенность.

Здесь сформированный массив был добавлен новым элементом «сам в себя» с автоматическим индексом "0", а затем еще раз с указанным индексом "z".

Json_decode() выполняет преобразование строки JSON в массив PHP. Аналогичных результатов можно добиться, манипулируя функциями и explode(). В некоторых случаях этот вариант предпочтительнее.

Уровень вложенности

Элементы могут быть вложены друг в друга как на стороне браузера, так и на стороне сервера. На практике формат JSON (описание стандарта RFC 4627) предоставляет значительно более 4 уровней вложенности, но не следует злоупотреблять этой возможностью.

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

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

Файлы JSON

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

Штат предприятия и JSON-формат: пример

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

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

JSON - это обычный текстовый файл. Случай со штатным расписанием, куда ни шло. Прочитать его всегда можно. Открыть и изменить также доступно в любом текстовом редакторе, который не имеет привычки добавлять свою служебную информацию в содержание файла. Вообще, *.json - это чистый текст как внутри браузера, так и внутри файла - строка.

На фото представлен кэш объекта, формирующего картинку, пример.

Это пример содержания файла, сформированного сайтом, предоставляющим услугу цветной объемной печати на кружках и керамических изделиях. Естественно, решить, имея такой JSON-формат, чем открыть его, действительно проблематично. Однако в этом и подобных случаях проблем с чтением файла не возникает: PHP читает файл, разбирает его и передает в браузер. Изменённые посетителем данные возвращаются на сервер и записываются обратно.

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

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

XML и JSON

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

Форматы данных появляются от реальной потребности и основываются на достигнутых знаниях. У HTML - своя стезя, у XML - своя дорога, а JSON - это объектная логика JavaScript, расширенная на другие языки. Сравнивать одно с другим не лучшее занятие. Каждому свое.

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

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

Спецсимволы («`», «~», «|», ...) и форматы данных

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

Функции join/split языка JavaScript и implode/explode языка PHP позволяют удобно и эффективно использовать как форматы данных XML, JSON, так и собственный вариант. Последний часто оптимальнее, а первые два идеально подходят для вариантов общего пользования. Если идет передача информации другому разработчику, серверу, в файл или в базу данных, лучше XML и JSON не найти. С ними все работают, потому передача/прием информации не нуждается в комментариях.

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

Чтение и запись данных в формате JSON в Android - не только норма вещей, но и множество объектов, ориентированных на работу именно с таким форматом данных.

При этом используется именно формат JSON. Возможно, это так и есть, но вопрос не в феноменальности соцсетей, а в том что действительно представление информации в формате "имя = значение" удобно как для программирования, так и для использования. В отличие от строгого и закомплексованного «XML» это действительно человеко-удобный формат.

Ассоциативные массивы

Сложилось так, что переменные надлежит описывать (JavaScript) или хотя бы указывать начальное значение (PHP). В обоих случаях переменная может изменить свой тип очень легко. При необходимости язык выполняет это преобразование автоматически.

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

Особенно это обстоятельство ярко выражено на PHP, но с этим можно мириться, как, впрочем, с символом «$» в имени переменной и комбинацией «$this->» внутри объекта. Программируя одновременно на JavaScript и PHP, поначалу действительно диву даешься, как все отличается, но потом все становится таким привычным и естественным...

Ассоциативный массив -> JSON

В этом примере посредством библиотеки PHPOffice/PHPWord создается документ *.docx, и массив aProperties содержит свойства этого документа (автор, компания, заголовок, категория, дата создания...).

Второй массив содержит данные по странице:

  • ориентация (альбомная или обычная);
  • размеры по вертикали и горизонтали;
  • отступы (поля слева, сверху, снизу, справа);
  • колонтитулы.

Формирование документа выполняется на сервере, где установлена библиотека PHPOffice/PHPWord. На сайте предусмотрено управление значениями этих массивов посредством JavaScript. Результат в формате JSON возвращается обратно на сервер и используется в алгоритмах на PHP, в его конструкциях, то есть в массивах.

Динамичные переменные

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

В этом примере функция GetOjInfo () выбирает имя значения и значение из объекта. Изначально объект JSON-строки, присвоенной переменной ojInfo, располагает тремя элементами: Name, age и work. Чуть позже добавляется переменная Status.

После первого оператора delete строка ojInfo теряет элемент age, после второго delete - элемент work. Если предположить, что данная строка есть подборка переменных, имеющих определенный смысл, то посредством JSON можно реально создавать, изменять и удалять любые их наборы вне операционного поля (синтаксиса) описания и обработки языка JavaScript.

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

Знакомые с программированием люди сразу узнают файлы с расширением JSON. Этот формат – аббревиатура терминов JavaScript Object Notation, и является он по сути текстовым вариантом обмена данными, использующемся в языке программирования JavaScript. Соответственно, справиться с открытием таких файлов поможет либо специализированное ПО, либо текстовые редакторы.

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

Способ 1: Altova XMLSpy

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


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

Способ 2: Notepad++

Многофункциональный текстовый редактор Notepad++ — первый из списка подходящих для открытия скриптов в формате JSON.


Плюсов у Notepad++ изрядно – тут и отображение синтаксиса многих языков программирования, и поддержка плагинов, и малый размер… Однако в силу некоторых особенностей работает программа неторопливо, особенно если открыть в ней объемный документ.

Способ 3: AkelPad

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


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

Способ 4: Komodo Edit

Бесплатное ПО для написания программного кода от компании Komodo. Отличается современным интерфейсом и широкой поддержкой функций для программистов.


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

Способ 5: Sublime Text

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


К сожалению, Sublime Text недоступен на русском языке. Недостатком можно назвать и условно-бесплатную модель распространения: свободная версия ничем не ограничена, но время от времени появляется напоминание о необходимости покупки лицензии.

Способ 6: NFOPad

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