JavaScript Object Notation (JSON) RFC4627
Рабочая Сетевая Группа
Комментариев и запросов: 4627
Категория: Информационный материал
MIME-тип application/json для JavaScript Object Notation (JSON)
Перевод: К.Карпенко
Статус данного документа
Этот документ является информационным материалом для Интернет Сообщества. Распространение данного документа неограничено. Данный документ никоем образом не является официальной спецификацией технологии JSON и имеет лишь рекоммендательный характер.
Авторские права
Все права защищены за The Internet Society (2006).
Обзор
JavaScript Object Notation (JSON) - это относительно малый по объёмам, основанный на тексте, платформенно-независимый формат обмена данными. Грамматика и семантика языка основаны на стандарте языка ECMAScript.
В целом JSON определяет небольшой список правил для форматирования переносных репрезентативных структур данных.
1. Введение
JavaScript Object Notation (JSON) - это текстовый формат для сериализации структурированных данных. Формат данных наследуется от объектных литералов языка JavaScript, что определяется в языковом стандарте ECMAScript Programming Language Standart, Третье Издание [ECMA]
JSON может представлять пять простейших типов данных (строки, числа, логический тип, и тип NULL) и две структуры данных (объект и массив).
Строки - это множество от нуля и более символов кодированных в стандарте Unicode [UNICODE]
Объект - это неупорядоченная коллекция от нуля и более пар имя/значение, где имя - некоторый набор символов с некоторым значением типа строка, число, булеан, null, объект либо массив.
Массив - упорядоченное множество и нуля и более значений.
Понятия `объект` и `массив` исходит из определений языка JavaScript. JSon скомпонован так, что представляет собой минимальное текстовое подмножество от языка JavaScript.
1.1 Понятия используемые в данном документе
Понятия `ОБЯЗАН`, `НЕ ОБЯЗАН`, `НЕОБХОДИМЫЙ`, `МОЖЕТ`, `НЕ МОЖЕТ`,
`ДОЛЖЕН`, `НЕ ДОЛЖЕН`, `РЕКОММЕНДУЕМО`, `ВОЗМОЖНО`, `ОПЦИОНАЛЬНО` в данном документе описаны в стандарте [RFC2119].
Грамматические правила, использованные в данном документе, в свою очередь описаны в стандарте [RFC4234].
2. Грамматика JSON
Текст формата JSON это множество символьных структур. Совокупность этих структур включают в себя шесть структурных типов данных, среди которых строки, числа, массивы и три литерала.
Текст формата JSON - это сериализированный объект или массив.
JSON-текст = объект / массив
Вот шесть структурных типов данных:
НАЧАЛО_МАССИВА = ws %x5B ws ; [левая квадратная скобка скобка
НАЧАЛО_ОБЪЕКТА = ws %x7B ws ; {левая фигурная скобка
ОКОНЧАНИЕ_МАССИВА = ws %x5D ws ; ] правая квадратная скобка
ОКОНЧАНИЕ_ОБЪЕКТА = ws %x7D ws ; } правая фигурная скобка
РАЗДЕЛИТЕЛЬ_ИМЁН = ws %x3A ws ; : двоеточие
РАЗДЕЛИТЕЛЬ_ЗНАЧЕНИЙ = ws %x2C ws ; , запятая
Наличие пробелов допускается перед и после всех шести типов данных.
ws = *(
%x20 / ; Пробел
%x09 / ; Горинтальная табуляция
%x0A / ; Символ новой строки
%x0D / ; Символ переноса каретки
)
2.1 Значения
Тип значения элемента JSON-форматированного элемента ОБЯЗАНО быть либо массивом, либо числом, либо строкой или одним из трёх следующих литералов:
ложь null правда
Имена элементов ОБЯЗАНЫ находится в нижнем регистре. Другие имена - не приемлемы.
Соответствие значений:
значение = ложь / null / правда / объект / массив / число / строка
Ложь = %x66.61.6c.73.65 ;ложь
Правда = %x74.72.75.65 ;правда
null = %x6e.75.6c.6c ;null
2.2 Объекты
Тип `объект` представлен как пара значений заключённых в фигурные скобки в которых находится одна либо более пар имя/значение (или элементов).
Имя в данном случае имеет строковый тип. Одинарное двоеточие, которое следует после имени - разделяет пару имя/значение и образует полную пару.
Одиночный символ запятой отделяет элементы объекта друг от друга. Имена, входящие в объект ДОЛЖНЫ быть уникальными.
объект = НАЧАЛО_ОБЪЕКТА [ элемент *(разделитель-значений значенией)]ОКОНЧАНИЕ_ОБЪЕКТА
элемент= строка разделитель-значений значение
2.3 Массивы
Массив - это структура, представленная квадратными скобками, между которыми находится одно либо более значений (или элементов). Элементы массива разделены запятыми.
массив = НАЧАЛО_МАССИВА [ значенией *(разделитель-значенией значенией)]ОКОНЧАНИЕ_МАССИВА
2.4 Числа
Представление чисел схоже с большинством языков программирования. Объект числового типа обязан содержать некоторое число, так же он может содержать опциональный минус как префикс, а так же запятую, которая разделяет число на целую и дробную часть.
Шестнадцатеричные и восьмеричные числа - не приемлемы, при этом лидирующий ноль не допускается. Числа после запятой указывают на дробную часть, и их количество может быть произвольным.
Числовые значения, которые не могут быть представлены в виде числовых последовательностей (к примеру, бесконечность, или пустое значение) - не приемлемы.
число = [ минус ] целое [ дробная-часть ] [ экспонента ]
дробная-часть = %x2E; .
цифры1-9 = %x31-39; 1-9
e = %x65 / %x45 ; e E
exp = e [ минус/ плюс ] 1*ЧИСЛО
frac = дробная-часть 1*ЧИСЛО
целое = ноль / ( число1-9 *ЧИСЛО )
минус = %x2D ; -
плюс = %x2B; +
ноль = %x30; 0
2.5 Строки
Строки в среде JSON подобны строковым конструкциям семьи языков типа Си.
Строки начинаются и заканчиваются двойными либо одинарными кавычками. Все символы юникода, которые помещаются между кавычками кроме символов, которые должны быть исключены: кавычки, обратный слэш, и управляющие символы (U+0000 и до U+001F).
3. Кодировка
Текст JSON МОЖЕТ быть кодирован в формате юникод. Стандартная кодировка платформы JSON – UTF-8. Начиная с первых двух символов JSON текст всегда является ASCII символами (RFC0020), что возможно определить как восьмеричный поток в UTF-8, UTF-16 (BE или LE), или UTF-32 (BE или LE) по присутствию в шаблонне нолей в первых четырёх октетах.
00 00 00 xx UTF-32BE
00 xx 00 xx UTF-16BE
xx 00 00 00 UTF-32LE
xx 00 xx 00 UTF-16LE
xx xx xx xx UTF-8
4. Обработчики
Обработчик JSON трансформирует текст JSON из одной репрезентативной системы в другую
Обработчик JSON ДОЛЖЕН обрабатывает текст, который подходит к словарю JSON.
Обработчик кода JSON МОЖЕТ принимать и не стандартный текст как расширение к технологии. При этом реализация обработчика может иметь ограничение размера текста, который она будет обрабатывать. Так же в реализации можно задать максимальную глубину обработки, список чисел, а так же лимит символов содержащихся в строке.
5. Обработчик
Обработчик JSON-кода интерпретирует код JSON. Результирующий текст ОБЯЗАН точно соответствовать грамматике JSON
6. IANA анализ
MIME тип приложений JSON это application/json.
Имя типа: applications
Подтип приложения: json
Требуемые параметры: нет
Опциональные параметры: нет
Приемлемые кодировки: 8бит если UTF-8; бинарный (двоичный) если UTF-16 либо UTF-32
JSON может использовать UTF-8, UTF-16, либо UTF-32. В том случае, когда реализация JSON-библиотеки написана с использованием кодировки UTF-8, то она называется 8-ми битно совместимый, и следует использовать 8-ми битное кодирование относительно обрабатываемых данных. Когда же JSON реализован с поддержкой UTF-16 либо UTF-32 - следует использовать бинарную передачу данных.
Настройки безопасности:
В основном настройки безопасности наследуются от среды технологии, в которых используется технология JSON.
Текст JSON может быть перенесён в среду JavaScript с помощью функции eval() (которые компилирует и исполняет строку), если все символы - не вложенные в строки в наборе символов как формы символьных классов JSON. Это может быть быстро устранено с помощью двух регулярных выражений, которые вызываются для теста и заменяют методы.
var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')');
JSON может быть использоваться для обмена между приложениями в средах: ActionScript, C, #C, ColdFusion, Common Lisp, E, Erlang, Java, JavaScript, Lua, Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Scheme.
7. Дополнительная информация
Дополнительные параметры:
Расширение файла (s): .json
Тип содержания файла для MacOS: TEXT
Адреса для контактов:
Дуглас Крокфорд
douglas@crockford.com
Автор спецификации:
Дуглас Крокфорд
douglas@crockford.com
8. Примеры
Объект JSON-технологии:
{
"Image": {
"Width": 800,
"Height": 600,
"Title": "Вид с 15-го этажа",
"Thumbnail": {
"Url": "http://www.example.com/image/481989943",
"Height": 125,
"Width": "100"
},
"IDs": [116, 943, 234, 38793]
}
}
Этот объект JSON содержит два массива.
[
{
"precision": "zip",
"Latitude": 37.7668,
"Longitude": -122.3959,
"Address": "",
"City": "SAN FRANCISCO",
"State": "CA",
"Zip": "94107",
"Country": "US"
},
{
"precision": "zip",
"Latitude": 37.371991,
"Longitude": -122.026020,
"Address": "",
"City": "SUNNYVALE",
"State": "CA",
"Zip": "94085",
"Country": "US"
}
]

Оставить комментарий
You must be авторизироватся для добавления комментария.