JSON
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Сводка
Объект JSON
содержит методы для разбора объектной нотации JavaScript (JavaScript Object Notation — сокращённо JSON) и преобразования значений в JSON. Его нельзя вызвать как функцию или сконструировать как объект, и кроме своих двух методов он не содержит никакой интересной функциональности.
Описание
Объектная нотация JavaScript
JSON является синтаксисом для сериализации объектов, массивов, чисел, строк логических значений и значения null
. Он основывается на синтаксисе JavaScript, однако всё же отличается от него: не каждый код на JavaScript является JSON, и не каждый JSON является кодом на JavaScript. Смотрите также статью JSON: подмножество JavaScript, которым он не является (на английском).
Тип JavaScript | Отличия от JSON |
---|---|
Объекты и массивы | Имена свойств должны быть строками, заключёнными в двойные кавычки; конечные запятые запрещены. |
Числа | Ведущие нули запрещены; перед десятичной запятой обязательно должна быть хотя бы одна цифра. |
Строки |
Только ограниченный набор символов может быть заэкранирован; некоторые
управляющие символы запрещены; разрешены юникодные символы
разделительной линии (U+2028) и разделительного параграфа (U+2029); строки должны быть заключены в двойные кавычки. Смотрите следующий
пример, в котором метод js
|
Ниже представлен полный синтаксис JSON:
JSON = null or true or false or JSONNumber or JSONString or JSONObject or JSONArray JSONNumber = - PositiveNumber or PositiveNumber PositiveNumber = DecimalNumber or DecimalNumber . Digits or DecimalNumber . Digits ExponentPart or DecimalNumber ExponentPart DecimalNumber = 0 or OneToNine Digits ExponentPart = e Exponent or E Exponent Exponent = Digits or + Digits or - Digits Digits = Digit or Digits Digit Digit = 0 through 9 OneToNine = 1 through 9 JSONString = "" or " StringCharacters " StringCharacters = StringCharacter or StringCharacters StringCharacter StringCharacter = any character except " or \ or U+0000 through U+001F or EscapeSequence EscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t or \u HexDigit HexDigit HexDigit HexDigit HexDigit = 0 through 9 or A through F or a through f JSONObject = { } or { Members } Members = JSONString : JSON or Members , JSONString : JSON JSONArray = [ ] or [ ArrayElements ] ArrayElements = JSON or ArrayElements , JSON
Во всех продукциях могут присутствовать незначащие пробельные символы, за исключением продукций ЧислоJSON
(числа не должны содержать пробелов) и СтрокаJSON
(где они интерпретируются как часть строки или возбуждают ошибку). Пробельными символами считаются символы табуляции (U+0009), возврата каретки (U+000D), перевода строки (U+000A) и, собственно, пробела (U+0020).
Методы
JSON.parse()
-
Разбирает строку JSON, возможно с преобразованием получаемого значения и его свойств и возвращает разобранное значение.
JSON.stringify()
-
Возвращает строку JSON, соответствующую указанному значению, возможно с включением только определённых свойств или с заменой значений свойств определяемым пользователем способом.
Полифил
Объект JSON
не поддерживается старыми браузерами. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать объект JSON
в реализациях, которые его ещё не поддерживают (например, в Internet Explorer 6).
Следующий алгоритм имитирует работу настоящего объекта JSON
:
if (!window.JSON) {
window.JSON = {
parse: function (sJSON) {
return eval("(" + sJSON + ")");
},
stringify: function (vContent) {
if (vContent instanceof Object) {
var sOutput = "";
if (vContent.constructor === Array) {
for (
var nId = 0;
nId < vContent.length;
sOutput += this.stringify(vContent[nId]) + ",", nId++
);
return "[" + sOutput.substr(0, sOutput.length - 1) + "]";
}
if (vContent.toString !== Object.prototype.toString) {
return '"' + vContent.toString().replace(/"/g, "\\$&") + '"';
}
for (var sProp in vContent) {
sOutput +=
'"' +
sProp.replace(/"/g, "\\$&") +
'":' +
this.stringify(vContent[sProp]) +
",";
}
return "{" + sOutput.substr(0, sOutput.length - 1) + "}";
}
return typeof vContent === "string"
? '"' + vContent.replace(/"/g, "\\$&") + '"'
: String(vContent);
},
};
}
Более сложными известными полифилами для объекта JSON
являются проекты JSON2 и JSON3.
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-json-object |
Совместимость с браузерами
BCD tables only load in the browser