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. Его нельзя вызвать как функцию или сконструировать как объект, и кроме своих двух методов он не содержит никакой интересной функциональности.
In this article
Описание
>Объектная нотация 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 JSONArrayJSONNumber = - PositiveNumber or PositiveNumberPositiveNumber = DecimalNumber or DecimalNumber . Digits or DecimalNumber . Digits ExponentPart or DecimalNumber ExponentPartDecimalNumber = 0 or OneToNine DigitsExponentPart = e Exponent or E ExponentExponent = Digits or + Digits or - DigitsDigits = Digit or Digits DigitDigit = 0 through 9OneToNine = 1 through 9JSONString = "" or " StringCharacters "StringCharacters = StringCharacter or StringCharacters StringCharacterStringCharacter = any character except " or \ or U+0000 through U+001F or EscapeSequenceEscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t or \u HexDigit HexDigit HexDigit HexDigitHexDigit = 0 through 9 or A through F or a through fJSONObject = { } or { Members }Members = JSONString : JSON or Members , JSONString : JSONJSONArray = [ ] 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> |