Когда у вас есть два компонента, которые должны общаться друг с другом (например, через Интернет), вам нужен способ передачи данных туда и обратно.
До недавнего времени XML был решением, которое часто выбирали в качестве формата передачи данных. Часто для связи использовалась очень многословная форма XML, известная как SOAP.
Совсем недавно появился новый формат, который начал заменять XML в качестве предпочтительного формата передачи данных, особенно при работе с веб-сайтами и веб-приложениями, под названием JSON.
JSON расшифровывается как
JavaScript Object Notation и представляет собой легкий формат обмена данными, который легко читается и пишется людям, а машины — легко генерировать и анализировать. (Я перефразировал этот абзац некоторые из:
http://www.json.org/)
Большинство основных языков программирования так или иначе поддерживают JSON посредством библиотек или, в некоторых случаях, встроенных прямо. Службы RESTful в .NET, например, могут возвращать XML или JSON.
Сначала я думал, что JSON предназначен только для объектов, как следует из его названия, но оказалось, что его можно использовать для представления двух разных структур:
- объект
- или массив
Создание объекта JSON
Объект JSON создается с помощью открывающей фигурной скобки (
{ ), за которой следуют пары имя / значение.
Каждая пара имя / значение отделяется запятой (
, ).
Само имя / значение пары разделенных двоеточием (
: ).
Имя — это строка, но значением может быть строка, число, объект, массив, истина, ложь или ноль.
Возможность использовать объект для части значения пары имя / значение открывает такие возможности, как вложение дополнительных объектов JSON в объект JSON или создание функций в объекте JSON.
JSON-объект закрывается с помощью закрывающей фигурной скобки (
} ).
JSON-объекты объявляются и инициализируются за один шаг, что приводит к так называемому одноэлементному объекту.
Возможность создания одноэлементного объекта не уникальна для JSON. Вы можете сделать так, чтобы стандартный класс JavaScript создавался как одноэлементный объект, но для этого требуется немного больше работы. Разница в том, что в JSON объект не может быть объявлен в одном месте, а затем инициализирован позже, как это может быть сделано стандартным классом.
Ниже представлен простейший объект JSON, который вы можете создать:
var objObject = {};
Приведенный выше пример является просто сокращением для написания следующего:
var objObject = new Object();
Ниже приведен пример созданного объекта JSON, который имеет два свойства
FirstName и
LastName со значениями
Sam и
Smith соответственно:
var objEmployee = { "FirstName": "Sam", "LastName": "Smith" };
Использование нового объекта objEmployee в JavaScript — это просто вопрос использования оператора точки для доступа к свойствам, которые были созданы, как в следующем примере:
alert("The employee’s name is: " + objEmployee.FirstName + " " + objEmployee.LastName);
Создание массива JSON
Для создания массива JSON вы используете открывающую квадратную скобку (
[ ), за которой следуют значения, разделенные запятыми и закрываемые закрывающей квадратной скобкой (
] )
. Простейший массив JSON, который вы можете создать, — это пустой массив с использованием следующего синтаксиса:
var arrArray = [];
Приведенный выше пример является просто сокращением для написания следующего:
var arrArray = new Array();
Ниже приведен пример создания массива, содержащего три строки:
var arrArray = [ "One", "Two", "Three" ];
Создание класса JSON
Это полностью зависит от ваших потребностей, если JSON является правильным выбором для вас, когда речь идет о создании классов.
Некоторые люди находят классы JSON проще и легче для чтения. Лично я не вижу большой разницы между читаемостью стандартного класса JavaScript и класса JSON.
Если вы довольны тем, что все ваши члены и методы в классе являются публичными, создание класса с использованием JSON немного проще, особенно если вам не нужно сначала объявлять класс, а затем инициализировать его позже. Это связано с тем, что объект / класс JSON автоматически инициализируется сразу после его объявления, что приводит к так называемому объекту-одиночке, поскольку вы получаете только один объект на объявление класса.
Эта автоматическая инициализация, когда класс JSON был объявлен, имеет свои применения, например, если вы хотите иметь глобальный объект пространства имен, содержащий некоторые вспомогательные методы, и не хотите, чтобы разработчик страниц (страниц) сначала инициализировал объект перед использованием методы (действуют как глобальные функции, но содержатся в более структурированном классе).
Класс JSON создается так же, как создается простой объект JSON, но вместо простой переменной или объекта вы используете функцию в качестве части значения пары имя / значение, как в следующем примере:
var Employee = { "FirstName": "Sam", "LastName": "Smith", // Our method to return the Employee's full name "GetFullName": function () { return (this.FirstName + " " + this.LastName); } }; alert(Employee.GetFullName());
Преобразование строк JSON в объекты JSON
При запросе данных JSON с сервера они обычно возвращаются в виде текстовой строки.
По возможности рекомендуется выполнять синтаксический анализ строки в объект JSON, используя собственные методы браузера, если браузер поддерживает эти методы.
Преобразование строки JSON в объект JSON с использованием собственного объекта браузера так же просто, как показано ниже:
var sJSON = "{ \"FirstName\": \"Sam\", \"LastName\": \"Smith\" }"; var objJSON = JSON.parse(sJSON); alert("JSON object's data: " + objJSON.FirstName + " " + objJSON.LastName);
В заключении
JSON — это интересная технология, которая может упростить некоторые задачи, а также помочь уменьшить объем пропускной способности, используемой при передаче данных между компонентами через Интернет / интранет, особенно по сравнению с SOAP.
Большое количество библиотек и встроенная функциональность для JSON также значительно упрощают передачу данных с использованием этого формата.