This page was translated from English by the community. Learn more and join the MDN Web Docs community.
JSON
 
 
 
 Baseline
 
 Widely available
 
 *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 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® 2026 Language Specification> # sec-json-object> | 
Совместимость с браузерами
Loading...