JSON, для обмена объектами между разными языками
JSON (JavaScript Object Notification) - формат данных для обмена между браузером и сервером. Его синтаксис похож на синтаксис ассоциативной таблицы в JavaScript. Фактически формат, установленный в 2002 году, был основан на подмножестве ECMA-252 спецификации языка.
Начиная с PHP 5.2 расширение JSON является частью установки PHP по умолчанию. Она предоставляет json_decode и json_encode функции, которые преобразуют строку в объект или строковый объект, что позволяет сохранить объект в файле или передать его в приложение JavaScript.
Все современные браузеры узнают объект JSON, который преобразует объект или отображает его в виде древовидной строки.
JSON даже стал типом данных в PostgreSQL и MySQL (5.5.7). Для этих бесплатных конкурентов Oracle контент JSON может быть таким же типом данных, как INTEGER или TEXT. Для его использования добавляются новые команды. Также можно выразить результат запроса в JSON.
Формат JSON распознает те же типы данных, что и JavaScript :
- Номер, Строка, Boolean и null - примитивы, которые можно назначить ключу, который должен быть строкой.
- Array - это список ключей-значений, заключенных в квадратные скобки.
- Объект - это список ключей-значений, размещенных между скобками.
Как использовать JSON в JavaScript
Читаем JSON-файл на сервере с помощью парсера. Они существуют для наиболее распространенных языков программирования.
На веб-странице просто предоставьте содержимое файла в качестве аргумента функции eval (), чтобы вернуть массив или объект, который может использоваться непосредственно JavaScript .
var x = eval('(' + xhr.responseText + ')');
Например, содержимое, назначенное атрибуту responseText объекта XMLHttpRequest при запросе в Ajax, может стать объектом в программе.
Перед назначением объекта в JavaScript с функцией eval рекомендуется очистить содержимое регулярным выражением, чтобы избежать возможного введения вредоносного кода.
var doc = xhr.responseText;
var obj = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.
test( doc.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + doc + ')');
Этот код приводится в RFC 4627.
Поскольку существуют JSON-парсеры для всех языков, работающих со стороны сервера, таким образом можно обмениваться объектами между JavaScript-приложением и бэкендом, например, если это PHP-скрипт :

Теперь мы должны заменить eval на JSON.parse, так как теперь это поддерживают все браузеры.
JSON vs XML и другие альтернативные форматы
Вот пример объекта, содержащего таблицу. Числовые значения записываются как есть, а строки всегда заключены в кавычки.
Файл JSON :
{
"menu": "Fichier",
"commandes":
[
{
"title": "Nouveau",
"action":"create"
},
{
"title": "Ouvrir",
"action": "open"
},
{
"title": "Quitter",
"action": "exit"
}
]
}
Этот файл представляет собой меню, статья, приведенная ниже, служит демонстрацией ее использования.
Эквивалент XML:
<menu label="Fichier">
<menulist>
<command label="Nouveau" command="create" />
<command label="Ouvrir" command="open"/>
<command label="Quitter" command="exit" />
</menulist>
</menu>
XML-версию читать проще, но для компьютера преимущество в JSON: легче, проще парсить, похож на объект JavaScript .
Более подробное сравнение см. в JSON или XML, какой формат выбрать?
Проверка данных может осуществляться с помощью схемы JSON. Это позволит избежать необходимости менять платформу, как это сделал Uber, на том основании, что полученные данные не всегда имеют ожидаемый формат.
Среди других конкурирующих форматов - YAML, более полный, но и более сложный и Protocol Buffers, созданный Google для своих серверов. Последний лучше вписывается в языки, отличные от JavaScript, потому что из прототипа, описывающего данные (это были бы строки меню в нашем примере) компилятор создает классы на языке C++ или Java для доступа к ним. Но это скорее подходит для статических данных.
Ссылки: Дополнительная информация о Json.org. Сайт предоставляет ссылку на парсер для каждого языка программирования. См. также спецификацию ECMA.