JSON (JavaScript Object Notation - представление объектов JavaScript) - легкий формат представления данных, основанный на подмножестве синтаксиса JavaScript, а точнее на литералах массивов и объектов. JSON - это альтернатива традиционным форматам (обычный текст или XML), которые используются при обмене данными между сервером и клиентом. В отличие от XML и XML-совместимых языков, которые требуют синтаксического анализа, определения JSON могут быть просто включены в сценарии JavaScript. Формат JSON предложен программистом Дугласом Крокфордом (Douglas Crockford).
Может я зайду издалека, но для того чтобы действительно понять JSON, сначала поймем (вспомним) синтаксис массивов и объектов в литеральной нотации JavaScript.
Массивы как литералы
Массив в JavaScript можно определить с помощью конструктора Array, например так:
var aData = new Array("строка", true, 43, null);
В JavaScript массивы нетипизированные, поэтому в них можно хранить различные типы данных. В примере массив содержит строку, логическое значение, число и значение null.
Массив же, описываемый как литерал, можно определить с помощью квадратных скобок, внутри - значения элементов массива, через запятую. Вот как будет выглядеть тот же самый массив, но в литеральной нотации:
var aData = ["строка", true, 43, null];
Обращаться к отдельным элемента массива можно указывая имя массива и номер элемента:
alert(aData[0]);
alert(aData[1]);
Объекты как литералы
Объекты в JavaScript определяются с помощью конструктора Object, например так:
var oAuto = new Object();
oAuto.firm = "Audi";
oAuto.model = "A6";
oAuto.year = 2008;
oAuto.price = 78000;
Тот же самый код, но в литеральной нотации будет выглядеть так:
var oAuto = {
"firm":"Audi",
"model":"A6",
"year":2008,
"price":78000
};
Этот код создает объект со свойствами firm, model, year и price и обращаться к ним можно таким образом:
alert(oAuto.model);
alert(oAuto.year);
но можно использовать и синтаксис массивов обращаясь к свойствам объекта таким образом:
alert(oAuto["model"]);
alert(oAuto["year"]);
В литеральной нотации описания массивов и объектов можно вкладывать друг в друга, создавая таким образом объект массивов или массив объектов. Посмотрите этот код:
var aAuto = [
{
"firm":"BMW",
"model":"X5",
"year":2007,
"price":99000
},
{
"firm":"Audi",
"model":"A6",
"year":2008,
"price":78000
},
{
"firm":"Volkswagen",
"model":"Touareg 7L",
"year":2006,
"price":45000
}
];
Мы создали массив aAuto, который содержит три объекта. Комбинируя синтаксис обращения к массивам с синтаксисом обращения к объектам попробуем получить год выпуска второго автомобиля:
alert(aAuto[1].year); // получаем 2008
Можно сделать наоборот, и описать объект массивов:
var oAuto = {
"firm":["BMW", "Audi", "Volkswagen"],
"model":["X5", "A6", "Touareg 7L"],
"year":[2007, 2008, 2006],
"price":[99000, 78000, 45000]
};
в этом случае обращаемся сначала к объекту, а затем к массиву внутри него:
alert(oAuto.year[1]); // получаем 2008
Вот такое длинное получилось предисловие, но зато теперь будет гораздо понятнее при чем здесь вообще JSON...
JSON - комбинация массивов и объектов и предназначен только для хранения данных. Как следствие, JSON не может иметь переменных и не допускает никаких операций над ними. Давайте попробуем записать предыдущий пример, используя синтаксис JSON:
{
"firm":["BMW", "Audi", "Volkswagen"],
"model":["X5", "A6", "Touareg 7L"],
"year":[2007, 2008, 2006],
"price":[99000, 78000, 45000]
}
Обратите внимание, что пропали имя переменной и точка-запятая. Передача такого объекта с использованием HTTP-протокола будет происходить очень быстро, поскольку содержит минимум символов. Получив такие данные на стороне клиента и записав ее в какую-либо переменную (например sData) мы получаем строку информации.
Обратите внимание: именно строку, а совсем не объект или объект с вложенными в него массивами. Преобразуем строку в объект, используя функцию eval().
var oAuto = eval("(" + sData + ")");
В результате этого получится объект, который мы описали чуть выше.
Преимущество JSON перед XML
Так в чем же все-таки состоит преимущество JSON перед XML?
Здесь речь идет исключительно о преимуществах и недостатках только лишь с точки зрения организации обмена данными в Сети.
В том, что язык XML оказывается очень избыточным при сравнении с JSON. Давайте убедимся в этом на простом примере. Одни и те же данные представим в формате XML и в формате JSON.
<general>
<cars>
<car>
<firm>BMW</firm>
<model>X5</model>
<year>2007</year>
<price>99000</price>
</car>
<car>
<firm>Audi</firm>
<model>A6</model>
<year>2008</year>
<price>78000</price>
</car>
<car>
<firm>Volkswagen</firm>
<model>Touareg 7L</model>
<year>2006</year>
<price>45000</price>
</car>
</cars>
</general>
При использовании формата JSON выигрыш составит 42 байта, а без учета пробелов и вовсе 86 байт. А если вспомнить еще и о том, что данные в формате JSON не требуют дополнительного синтаксического анализа на стороне клиента - преимущество JSON перед XML в аспекте передачи данных от сервера клиенту становится очевидным...
По этой теме могу порекомендовать прочитать переводную статью JSON и XML. Что лучше? на Хабрахабре, а я надеюсь, что мне удастся в ближайшем будущем подробнее рассказать о утилитах для работы с JSON как на стороне клиента, так и на стороне сервера.
Комментариев нет:
Отправить комментарий