Введение
JSON (JavaScript Object Notation) — это формат обмена данными. Как следует из названия, JSON происходит от языка программирования JavaScript, но доступен для многих языков, включая Python, Ruby, PHP и Java. JSON часто произносится как имя “Джейсон”.
JSON также легко читается, занимает мало места, является хорошей альтернативой XML и требует гораздо меньшего форматирования. В этом информативном руководстве рассматриваются данные, которые можно использовать в JSON-файлах, а также общая структура и синтаксис этого формата.
Понимание синтаксиса и структуры
JSON использует расширение .json, когда он существует отдельно, а при определении в другом формате файла (например, .html) он может отображаться как JSON-строка в кавычках или как объект, назначенный переменной. Этот формат передается между веб-сервером и клиентом или браузером.
JSON-объект — это формат данных типа «ключ-значение», обычно заключенный в фигурные скобки. При работе с JSON вы, вероятно, столкнетесь с JSON-объектами в JSON-файле, но они также могут существовать в виде JSON-объекта или строки в контексте программы.
Вот пример объекта JSON:
{
"first_name" : "Sammy",
"last_name" : "Shark",
"location" : "Ocean",
"online" : true,
"followers" : 987
}Хотя это короткий пример, а JSON может состоять из нескольких строк, он показывает, что формат обычно задаётся двумя круглыми скобками (или фигурными скобками), представленными {}, по обе стороны от них, за которыми следует пара «ключ-значение». Эти пары заполняют пространство между ними. Большая часть данных, используемых в JSON, инкапсулирована в JSON-объект.
Пары “ключ-значение” разделяются двоеточием, например, “ключ”: “значение”. Каждая пара “ключ-значение” разделяется запятой, поэтому середина JSON-кода выглядит следующим образом: “ключ”: “значение”, “ключ”: “значение”, “ключ”: “значение”. В предыдущем примере первая пара «ключ-значение» — «first_name»: «Сэмми».
Ключи JSON находятся слева от двоеточия. Они должны быть заключены в двойные кавычки, например, “key”, и могут быть любой допустимой строкой. В пределах каждого объекта ключи должны быть уникальными. Эти ключевые строки могут содержать пробелы, например, «first_name», но это может затруднить доступ к ним при программировании, поэтому лучше использовать подчеркивание, например, «first_name».
Значения JSON находятся справа от двоеточия. На детальном уровне они должны соответствовать одному из следующих шести типов данных:
- струны
- числа
- объекты
- массивы
- Булевы значения (истина или ложь)
- нулевой
На более широком уровне значения также могут быть созданы из сложных типов данных JSON-объектов или массивов, что будет обсуждаться в следующем разделе.
Каждый из типов данных, передаваемых в качестве значений в JSON, поддерживает свой собственный синтаксис, то есть строки заключаются в кавычки, а числа — нет.
В файлах .json вы обычно получаете шаблон, разбитый на несколько строк, но JSON также можно записать в одну строку, как в следующем примере:
{ "first_name" : "Sammy", "last_name": "Shark", "online" : true, }Это чаще встречается в файлах другого типа или при столкновении со строкой JSON.
Запись JSON в несколько строк часто делает его гораздо более читабельным, особенно при работе с большими наборами данных. Поскольку JSON игнорирует пробелы между элементами, вы можете разделить пары «ключ-значение» двоеточиями, чтобы сделать данные ещё более удобными для восприятия:
{
"first_name" : "Sammy",
"last_name" : "Shark",
"online" : true
}Важно помнить, что, хотя объект JSON выглядит похоже, он не имеет того же формата, что и объект JavaScript. Поэтому, хотя вы можете использовать функции в объектах JavaScript, вы не можете использовать их в качестве значений в JSON. Важнейшей особенностью JSON является то, что его можно легко переносить между языками программирования в формате, поддерживаемом всеми участвующими языками. В отличие от этого, с объектами JavaScript можно работать только напрямую через язык программирования JavaScript.
JSON можно усложнить, используя иерархии, состоящие из вложенных объектов и массивов. Подробнее об этих сложных структурах вы узнаете на следующем этапе.
Работа со сложными типами в JSON
Помимо вложенных массивов, JSON может хранить вложенные объекты в формате JSON. Эти объекты и массивы передаются как значения, назначенные ключам, и могут также состоять из пар «ключ-значение».
Вложенные объекты
В следующем файле users.json для каждого из четырёх пользователей (“Сэмми”, “Джесси”, “Дрю”, “Джейми”) в качестве значения передаётся вложенный JSON-объект с собственными вложенными ключами “имя пользователя” и “местоположение”, соответствующими каждому из пользователей. Каждая запись пользователя в следующем блоке кода является примером вложенного JSON-объекта:
{
"sammy" : {
"username" : "SammyShark",
"location" : "Indian Ocean",
"online" : true,
"followers" : 987
},
"jesse" : {
"username" : "JesseOctopus",
"location" : "Pacific Ocean",
"online" : false,
"followers" : 432
},
"drew" : {
"username" : "DrewSquid",
"location" : "Atlantic Ocean",
"online" : false,
"followers" : 321
},
"jamie" : {
"username" : "JamieMantisShrimp",
"location" : "Pacific Ocean",
"online" : true,
"followers" : 654
}
}В этом примере фигурные скобки используются для формирования вложенного JSON-объекта с именем пользователя и данными о его местоположении для каждого из четырёх пользователей. Как и в случае с любым другим значением, при использовании объектов элементы разделяются запятыми.
Вложенные массивы
Вы также можете вкладывать данные в JSON, используя массивы JavaScript, которые передаются как значения. В JavaScript используются скобки [] с обеих сторон обозначения типа массива. Массивы — это упорядоченные коллекции, которые могут содержать значения различных типов данных.
Например, вы можете использовать массив при работе с большим количеством данных, которые можно сгруппировать, например, когда с одним пользователем связаны различные веб-сайты и профили в социальных сетях.
С первым вложенным массивом профиль пользователя “Сэмми” может выглядеть так:
{
"first_name" : "Sammy",
"last_name" : "Shark",
"location" : "Ocean",
"websites" : [
{
"description" : "work",
"URL" : "https://www.digitalocean.com/"
},
{
"desciption" : "tutorials",
"URL" : "https://www.digitalocean.com/community/tutorials"
}
],
"social_media" : [
{
"description" : "twitter",
"link" : "https://twitter.com/digitalocean"
},
{
"description" : "facebook",
"link" : "https://www.facebook.com/DigitalOceanCloudHosting"
},
{
"description" : "github",
"link" : "https://github.com/digitalocean"
}
]
}Ключи “websites” и “social_media” используют массив для хранения информации о двух ссылках на веб-сайты Сэмми и трёх ссылках на профили в социальных сетях. То, что это массивы, можно понять по квадратным скобкам.
Использование вложенности в формате JSON позволяет работать с более сложными и иерархическими данными.
Сравнение JSON с XML
XML (расширяемый язык разметки) — это способ хранения данных, доступных как для чтения человеком, так и для машин. Формат XML доступен во многих языках программирования.
Во многих отношениях XML похож на JSON, но требует гораздо больше текста, а его чтение и запись занимают больше времени и требуют больше времени. XML также требует анализа XML-парсером, но JSON можно анализировать стандартной функцией. Кроме того, в отличие от JSON, XML не может использовать массивы.
Вот пример формата XML:
<users>
<user>
<username>SammyShark</username> <location>Indian Ocean</location>
</user>
<user>
<username>JesseOctopus</username> <location>Pacific Ocean</location>
</user>
<user>
<username>DrewSquir</username> <location>Atlantic Ocean</location>
</user>
<user>
<username>JamieMantisShrimp</username> <location>Pacific Ocean</location>
</user>
</users>Теперь сравните те же данные, представленные в формате JSON:
{"users": [
{"username" : "SammyShark", "location" : "Indian Ocean"},
{"username" : "JesseOctopus", "location" : "Pacific Ocean"},
{"username" : "DrewSquid", "location" : "Atlantic Ocean"},
{"username" : "JamieMantisShrimp", "location" : "Pacific Ocean"}
] }JSON гораздо компактнее и не требует закрывающих тегов, в отличие от XML. Более того, XML не использует массивы, как в этом примере JSON (что заметно по скобкам).
Если вы знакомы с HTML, вы заметите, что XML во многом похож на него в плане использования тегов. Хотя JSON более компактен и многословен, чем XML, и быстрее в использовании во многих ситуациях, включая приложения AJAX, вам сначала нужно определить тип проекта, над которым вы работаете, прежде чем выбирать, какие структуры данных использовать.
Результат
JSON — это облегчённый формат, позволяющий обмениваться данными, хранить их и работать с ними. Поддержка JSON в API, включая API Twitter, растёт. JSON также является естественным форматом для использования в JavaScript и имеет множество реализаций в различных популярных языках программирования. Полную информацию о поддержке этого языка можно найти на сайте «Введение в JSON».
Поскольку вы, вероятно, не будете создавать собственные JSON-файлы, а будете получать их из других источников, важно меньше думать о структуре JSON и больше о том, как наилучшим образом использовать JSON в своих приложениях. Например, с помощью инструмента с открытым исходным кодом Mr. Data Converter вы можете преобразовать CSV-файлы или данные с разделителями табуляции, которые могут встречаться в электронных таблицах, в JSON. Вы также можете преобразовать XML в JSON и обратно, используя сайт Utilities-online.info, лицензированный по лицензии Creative Commons.
Наконец, при переводе других типов данных в JSON или создании собственного типа вы можете проверить JSON с помощью JSONLint и протестировать JSON в контексте веб-разработки с помощью JSFiddle.









