Хелпикс

Главная

Контакты

Случайная статья





Сравнение JSON и XML



 

JSON (англ. JavaScriptObjectNotation, обычно произносится как /ˈdʒeɪsən/[1]) — текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и другие текстовые форматы, JSON легко читается людьми. Формат JSON был разработан Дугласом Крокфордом[2].

Несмотря на происхождение от JavaScript, формат считается независимым от языка и может использоваться практически с любым языком программирования. Для многих языков существует готовый код для создания и обработки данных в формате JSON.

Данные в формате JSON представляют собой обычный текст, который написан по определенным правилам. Эти данные могут храниться как на веб-странице, так и в отдельном файле с расширением *.json.

Для того, чтобы лучше представлять, что же такое данные JSON, давайте посмотрим на следующий пример:


 

 

{

 "array": [1,2,3],

 "boolean": true,

 "null": null,

 "number": 123,

 "object": {

 "a": "b",

 "c": "d",

 "e": "f"

 },

 "string": "Hello World"

}

 

Как можно видеть, в этом примере данные в формате JSON, имеют сложную структуру. Они представляют собой: объекты, массивы, строки и пары имя: значение.

Есть несколько основных правил для создания строки JSON:

· Строка JSON содержит либо массив значений, либо объект (ассоциативный массив пар имя/значение).

· Массив заключается в квадратные скобки ([ и ]) и содержит разделенный запятой список значений.

· Объект заключается в фигурные скобки ({ и }) и содержит разделенный запятой список пар имя/значение.

· Пара имя/значение состоит из имени поля, заключенного в двойные кавычки, за которым следует двоеточие (:) и значение поля.

· Значение в массиве или объекте может быть:

o Числом (целым или с плавающей точкой)

o Строкой (в двойных кавычках)

o Логическим значением (true или false)

o Другим массивом (заключенным в квадратные скобки)

o Другой объект (заключенный в фигурные скобки)

o Значение null

Чтобы включить двойные кавычки в строку, нужно использовать обратную косую черту: \". Так же, как и во многих языках программирования, можно помещать управляющие символы и шестнадцатеричные коды в строку, предваряя их обратной косой чертой.

Ниже приводится пример оформления заказа в формате JSON:

{

 

"orderID": 12345,

 

"shopperName": "Ваня Иванов",

 

"shopperEmail": "ivanov@example.com",

 

"contents": [

 

{

 

"productID": 34,

 

"productName": "Супер товар",

 

"quantity": 1

 

},

 

{

 

"productID": 56,

 

"productName": "Чудо товар",

 

"quantity": 3

 

}

 

],

 

"orderCompleted": true

 

}

Рассмотрим строку подробно:

· Мы создаем объект с помощью фигурных скобок ({ и }).

· В объекте есть несколько пар имя/значение:

"orderID": 12345

Свойство с именем "orderId" и целочисленным значением 12345

"shopperName": "Ваня Иванов"

свойство с именем "shopperName" и строковым значением "Ваня Иванов"

"shopperEmail": "johnsmith@example.com"

Свойство с именем "shopperEmail" и строковым значением"ivanov@example.com"

"contents": [ ... ]

Свойство с именем "contents", значение которого является массивом

"orderCompleted": true

Свойство с именем "orderCompleted" и логическим значениемtrue

· В массиве "contents" есть 2 объекта, представляющие отдельные позиции в заказе. Каждый объект содержит 3 свойства: productID, productName, и quantity.

Кстати, так как JSON основан на объявлении объектов JavaScript, то вы можете быстро и просто сделать выше приведенную строку JSON объектом JavaScript:

<scripttype="text/javascript">

 

var cart = {

 

"orderID": 12345,

 

"shopperName": "Ваня Иванов",

 

"shopperEmail": "ivanov@example.com",

 

"contents": [

 

{

 

"productID": 34,

 

"productName": "Супер товар",

 

"quantity": 1

 

},

 

{

 

"productID": 56,

 

"productName": "Чудо товар",

 

"quantity": 3

 

}

 

],

 

"orderCompleted": true

 

};

 

</script>

Сравнение JSON и XML

Во многих отношениях вы можете рассматривать JSON как альтернативу XML, по крайней мере, в сфере веб приложений. Концепция AJAX оригинально основывалась на использовании XML для передачи данных между сервером и браузером. Но в последние годы JSON становится все более популярным для переноса данных AJAX.

Хотя XML является проверенной технологией, которая используется в достаточном количестве приложений, преимуществами JSON являются более компактный и простой для распознавания формат данных.

Вот как будет выглядеть выше приведенный пример объекта на XML:

<object>

 

<property>

 

<key>orderID</key>

 

<number>12345</number>

 

</property>

 

<property>

 

<key>shopperName</key>

 

<string>Ваня Иванов</string>

 

</property>

 

<property>

 

<key>shopperEmail</key>

 

<string>ivanov@example.com</string>

 

</property>

 

<property>

 

<key>contents</key>

 

<array>

 

<object>

 

<property>

 

<key>productID</key>

 

<number>34</number>

 

</property>

 

<property>

 

<key>productName</key>

 

<string>Супер товар</string>

 

</property>

 

<property>

 

<key>quantity</key>

 

<number>1</number>

 

</property>

 

</object>

 

<object>

 

<property>

 

<key>productID</key>

 

<number>56</number>

 

</property>

 

<property>

 

<key>productName</key>

 

<string>Чудо товар</string>

 

</property>

 

<property>

 

<key>quantity</key>

 

<number>3</number>

 

</property>

 

</object>

 

</array>

 

</property>

 

<property>

 

<key>orderCompleted</key>

 

<boolean>true</boolean>

 

</property>

 

</object>

Версия XML имеет существенно больший размер. В действительности она имеет длину 1128 символов, а вариант JSON - только 323 символа. Версию XML также достаточно трудно воспринимать.

Конечно, это радикальный пример. И возможно создать более компактную запись XML. Но даже она будет существенно длиннее эквивалента на JSON.

В Android есть готовые классы для работы с JSON:

JSONObject, JSONArray, JSONWriter, JSONStringer и т. д. В той статье мы рассмотрим все методы классов JSONObject и JSONArray и приведем примеры их использования.

JSONObject

Собственно сам класс, в котором хранятся пары ключ/значение.

try{

JSONObject jsonObject = new JSONObject("{"name":"Иван"}");

} catch (JSONException e){}

getBoolean(String key), getDouble(String key), getInt(String key), getLong(String key), getString(String key) ищетстрокупоключуивозвращаетее, еслионаесть.

try{

JSONObject jsonObject = new JSONObject("{"name":"Елена"}");

 String name = jsonObject.getString("name");

Log.d("json", jsonObject);

Log.d("json", "Имя " + name);

} catch (JSONException e){}

getJSONArray(Stringkey) — ищетзначениепоключуивозвращаетобъекткласса JSONArray, еслионесть.

getJSONObject(Stringkey) — ищет значение по ключу и возвращает объект класса JSONObject, если он есть.

getNames(JSONObjectjo) — статический метод класса JSONObject, возвращает массив имен, которые содержит объект.

has(Stringkey) — проверяет, содержит ли объект указанный ключ.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.