MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Сводка

Метод JSON.parse() разбирает строку JSON, возможно с преобразованием получаемого в процессе разбора значения.

Синтаксис

JSON.parse(text[, reviver])

Параметры

text
Разбираемая строка JSON. Смотрите документацию по объекту JSON для описания синтаксиса JSON.
reviver Необязательный
Если параметр является функцией, определяет преобразование полученного в процессе разбора значения, прежде, чем оно будет возвращено вызывающей стороне.

Возвращаемое значение

Возвращает объект Object, соответствующий переданной строке JSON text.

Выбрасываемые исключения

Выбрасывает исключение SyntaxError, если разбираемая строка не является правильным JSON.

Примеры

Пример: использование метода JSON.parse()

JSON.parse('{}');              // {}
JSON.parse('true');            // true
JSON.parse('"foo"');           // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null');            // null

Пример: использование параметра reviver

Если определён параметр reviver, значение, вычисляемое при разборе строки, будет преобразовано перед его возвратом. В частности, вычисленное значение и все его свойства (начиная с самых вложенных свойств и кончая самим значением), каждое проходят через функцию reviver, которая вызывается с контекстом this, содержащим объект в виде обрабатываемого свойства, и с аргументами: именем свойства в виде строки и значением свойства. Если функция reviver вернёт undefined (либо вообще не вернёт никакого значения, например, если выполнение достигнет конца функции), свойство будет удалено из объекта. В противном случае свойство будет переопределено возвращаемым значением.

В конечном итоге, функция reviver вызывается с пустой строкой и самым верхним значением, чтобы обеспечить преобразование самого верхнего значения. Убедитесь, что вы правильно обрабатываете этот случай — обычно для этого нужно просто вернуть само значение — или метод JSON.parse() вернёт undefined.

JSON.parse('{"p": 5}', function(k, v) {
  if (k === '') { return v; } // самое верхнее значение - возвращаем его
  return v * 2;               // иначе возвращаем v * 2.
});                           // { p: 10 }

JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', function(k, v) {
  console.log(k); // пишем имя текущего свойства, последним именем будет ""
  return v;       // возвращаем неизменённое значение свойства
});

// 1
// 2
// 4
// 6
// 5
// 3 
// ""

Спецификации

Спецификация Статус Комментарии
ECMAScript 5.1 (ECMA-262)
Определение 'JSON.parse' в этой спецификации.
Стандарт Изначальное определение. Реализована в JavaScript 1.7.
ECMAScript 6 (ECMA-262)
Определение 'JSON.parse' в этой спецификации.
Кандидат в рекомендации  

Совместимость с браузерами

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) 3.5 (1.9.1) 8.0 10.5 4.0
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) 1.0 (1.0) (Да) (Да) (Да)

На основе таблицы совместимости Kangax.

Примечания по Gecko

Начиная с Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26), при передаче некорректной строки JSON выдаётся более подробное собщение об ошибке, содержащее номер строки и колонки, в которых была обнаружена ошибка разбора. Это полезно при отладке больших данных JSON.

JSON.parse('[1, 2, 3,]');
// SyntaxError: JSON.parse: unexpected character at
// line 1 column 10 of the JSON data
// SyntaxError: JSON.parse: неожиданный символ
// в строке 1, колонке 10 данных JSON

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: catsAND, Mingun, teoli, Grundy
 Обновлялась последний раз: catsAND,