JSON
JSON (англ. JavaScript Object Notation) — легкий формат обмена данными между компьютерами.
JSON построен на основе текста, и может быть с легкостью прочитан человеком. Формат позволяет передавать объекты и другие структуры данных. Этот формат в основном используется для передачи структурированной информации через сеть (благодаря процессу, называемому сериализацией). Разработал и популяризировал формат Дуглас Крокфорд.
JSON нашел свое главное назначение в написании веб-приложений, а именно при использовании технологии AJAX. JSON выступает как замена XML при асинхронной передачи структурированной информации между клиентом и сервером. При этом преимуществом JSON перед XML является то, что он занимает меньше места и прямо интерпретируется с помощью Javascript в объекты.
Содержание |
[править] Использование
За счет своей лаконичности в сравнении с XML, формат JSON больше подходит для сериализации сложных структур.
В отрасли веб-приложений он уместен в задачах обмена данными как между браузером и сервером (AJAX), так и между самими серверами (программные HTTP-интерфейсы). Формат JSON так же хорошо подходит для хранения сложных динамических структур в реляционных базах данных или файловом кэше.
[править] Пример использования
{ "firstName": "John", "lastName": "Smith", "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": 10021 }, "phoneNumbers": [ "212 555-1234", "646 555-4567" ] }
[править] Синтаксис
JSON строится на двух структурах:
- Набор пар имя / значение. В разных языках это реализовано как объект, запись, структура, словарь, хэш-таблица, список с ключом или ассоциативным массивом.
- Упорядоченный список значений. Во многих языках это реализовано как массив, вектор, список или последовательность.
Это универсальные структуры данных. Теоретически все современные языки программирования поддерживают их в той или иной форме. Поскольку JSON используется для обмена данными между различными языками программирования, то есть смысл строить его на этих структурах.
В JSON используются следующие формы этих структур:
- Объект - неупорядоченное множество пар имя / значение. Объект начинается с символа { и заканчивается символом }. Каждое значение следует за : и пары имя / значение отделяются запятыми.
- Массив - упорядоченное множество значений. Массив начинается символом [ и заканчивается символом ]. Значение отделяются запятыми.
- Значение может быть строкой в двойных кавычках, или числом, или логическими true или false, или null, или объектом, или массивом. Эти структуры могут быть вложены друг в друга.
- Строка - упорядоченное множество из нуля или более символов юникода, ограничена двойными кавычками, с использованием escape-последовательностей, начинающихся с обратной косой черты (backslash). Символы представляются простой строкой.
[править] Расширение
[править] JSONP
JSONP или «JSON с подкладкой» является расширением JSON, в котором имя функции обратного вызова указывается как входной аргумент. Сначала идея была предложена в блоге MacPython в 2005 году. Дальнейшие расширения этого протокола были предложены с учетом введения дополнительных аргументов, как, например, в случае JSONPP при поддержке веб-сервисов S3DB.
Поскольку JSONP использует скрипт-теги, вызов происходит в открытом виде. По этой причине, JSONP неуместен для передачи конфиденциальных данных.
Включение скриптовых тегов от удаленных сайтов позволяет передать любой контент на сайте. Если удаленный сайт имеет уязвимости, которые позволяют выполнить инъекции JavaScript, то начальный сайт также может быть затронут ими.