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.
* Some parts of this feature may have varying levels of support.
Сводка
Объект 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® 2025 Language Specification # sec-json-object |
Совместимость с браузерами
BCD tables only load in the browser