JSON — различия между версиями

Материал из darklurker wiki
Перейти к: навигация, поиск
Строка 2: Строка 2:
  
 
JSON-текст представляет собой (в закодированном виде) одну из двух структур:
 
JSON-текст представляет собой (в закодированном виде) одну из двух структур:
* Набор пар ''ключ: значение''. В различных языках это реализовано как ''[[Объект (программирование)|объект]]'', [[Запись (тип данных)|запись]], [[Структура данных|структура]], [[Ассоциативный массив|словарь]], [[хэш-таблица]], [[Список (информатика)|список]] с ключом или [[ассоциативный массив]]. Ключом может быть только строка (регистрозависимая: имена с буквами в разных регистрах считаются разными<ref>http://jsonrpc.org/historical/json-rpc-1-1-alt.html#service-procedure-and-parameter-names</ref>), значением — любая форма.
+
* Набор пар ''ключ: значение''. В различных языках это реализовано как ''[[Объект (программирование)|объект]]'', [[Запись (тип данных)|запись]], [[Структура данных|структура]], [[Ассоциативный массив|словарь]], [[хэш-таблица]], [[Список (информатика)|список]] с ключом или [[ассоциативный массив]]. Ключом может быть только строка (регистрозависимая: имена с буквами в разных регистрах считаются разными).
 
* Упорядоченный набор ''значений''. Во многих языках это реализовано как [[Массив (программирование)|массив]], [[индексный массив|вектор]], список или [[последовательность]].
 
* Упорядоченный набор ''значений''. Во многих языках это реализовано как [[Массив (программирование)|массив]], [[индексный массив|вектор]], список или [[последовательность]].
  

Версия 02:17, 5 декабря 2018

JSON (JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript.

JSON-текст представляет собой (в закодированном виде) одну из двух структур:

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

В качестве значений в JSON могут быть использованы:

  • Объект — это неупорядоченное множество пар ключ:значение, заключённое в фигурные скобки «{ }». Ключ описывается строкой, между ним и значением стоит символ «:». Пары ключ-значение отделяются друг от друга запятыми.
  • Массив (одномерный) — это упорядоченное множество значений. Массив заключается в квадратные скобки «[ ]». Значения разделяются запятыми.
  • Число.
  • Литералы true, false и null.
  • Строка — это упорядоченное множество из нуля или более символов юникода, заключённое в двойные кавычки. Символы могут быть указаны с использованием escape-последовательностей, начинающихся с обратной косой черты «\» (поддерживаются варианты \', \", \\, \/, \t, \n, \r, \f и \b), или записаны шестнадцатеричным кодом в кодировке Unicode в виде \uFFFF.

Строка очень похожа на одноимённый тип данных в языках С и Java. Число тоже очень похоже на С- или Java-число, за исключением того, что используется только десятичный формат. Пробелы могут быть вставлены между любыми двумя синтаксическими элементами.

Следующий пример показывает JSON-представление объекта, описывающего человека. В объекте есть строковые поля имени и фамилии, объект, описывающий адрес, и массив, содержащий список телефонов. Как видно из примера, значение может представлять собой вложенную структуру.

{
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш., 101, кв.101",
       "city": "Ленинград",
       "postalCode": "101101"
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}

Обратите внимание на пару "postalCode": "101101". В качестве значений в JSON могут быть использованы как число так и строка. Поэтому запись "postalCode": "101101" содержит строку, а "postalCode": 101101 - уже числовое значение. Учитывая неопределенность типа переменных в JS (определены только типы значений), в дальнейшем, как правило, не возникает проблем с приведением типа. Но если данные в формате JSON обрабатываются в другой среде, отличной от JS, то нужно быть внимательным.

На языке XML подобная структура выглядела бы примерно так:

<person>
  <firstName>Иван</firstName>
  <lastName>Иванов</lastName>
  <address>
    <streetAddress>Московское ш., 101, кв.101</streetAddress>
    <city>Ленинград</city>
    <postalCode>101101</postalCode>
  </address>
  <phoneNumbers>
    <phoneNumber>812 123-1234</phoneNumber>
    <phoneNumber>916 123-4567</phoneNumber>
  </phoneNumbers>
</person>

или так:

<person firstName="Иван" lastName="Иванов">
  <address streetAddress="Московское ш., 101, кв.101" city="Ленинград" postalCode="101101" />
  <phoneNumbers>
    <phoneNumber>812 123-1234</phoneNumber>
    <phoneNumber>916 123-4567</phoneNumber>
  </phoneNumbers>
</person>