JavaScript метод JSON.parse()

JavaScript JSON

Определение и применение

JavaScript метод .parse() объекта JSON является глобальной функцией, предназначенной для анализа (парсинга) строк в формате JSON, при необходимости преобразует и возвращает значения, полученные в ходе анализа.

В качестве возвращаемого значения вы можете получить объект, массив или элементарное значение, полученное в результате анализа переданной строки в формате JSON.

Для того, чтобы преобразовать элементарные значения, объекты, или массивы в строку в формате JSON вы можете воспользоваться глобальной функцией JSON.stringify() (се­риа­ли­зу­ет объ­ект, мас­сив или эле­мен­тар­ное зна­че­ние).

Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
JSON.parse()ДаДаДаДа8.0Да

JavaScript синтаксис:

JSON.parse(text);
JSON.parse(text, reviver);

text - String
reviver - Function

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

JavaScript 1.7

Значения параметров

ПараметрОписание
textАнализируемая строка в формате JSON. Обязательный параметр.
reviverФункция, предназначенная для преобразования значения, полученного в ходе анализа перед его возвращением из метода. Необязательный параметр.

Обращаю Ваше внимание, что функция (если она указана) будет вызвана для каждого элементарного значения анализимруемой строки, она не вызывается для объектов или массивов, содержащих эти элементарные значения. При вызове функции будет передано два аргумента:

  • Первый аргумент – имя свойства объекта, или индекс массива в виде строки.
  • Второй аргумент – элементарное значение этого свойства объекта, или элемента массива.

Возвращаемое значение из функции станет новым значением заданного свойства, если она вернет тоже значение, которое было передано во втором аргументе, то значение этого свойства не будет изменено. Если функция возвращает значение undefined, или не вернет никакого значения, то данное свойство будет удалено из объекта или массива перед тем как метод JSON.parse() вернет его.

Функция вызывается как метод объекта или массива, содержащего элементарное значение, за исключением того случая, когда анализируемая строка является представлением элементарного значения, а не объекта или массива. В этом случае элементарное значение будет сохранено во вновь созданном объекте в свойстве, именем которого является пустая строка, и функция будет вызвана для относительно этого вновь созданного объекта с пустой строкой в первом аргументе и элементарным значением – во втором.

Исключения

Тип исключенияОписание
SyntaxErrorВозникает в том случае, если разбираемая строка содержит не допустимый (не валидный) JSON.

Пример использования

Базовый анализ строк в виде JSON

В следующем примере мы с Вами рассмотрим как с помощью глобальной функции JSON.parse() объекта JSON произвести анализ строк в формате JSON и вернуть значения, полученные в ходе анализа.

// инициализируем три переменные, содержащие строки в формате JSON
const jsonString = '{"a":true, "b":10, "c": ["c1", "c2", "c3"], "d":{"d1": 1, "d2": 2, "d3": 3}}',
      jsonString2 = '["a", "b", {"c": false}]',
      jsonString3 = '"test"';

// анализируем переданные строки и инициализируем переменные, полученным значением
const obj = JSON.parse(jsonString),
      obj2 = JSON.parse(jsonString2),
      obj3 = JSON.parse(jsonString3);

// выводим в консоль значения переменных
console.log(obj);
{a: true, b: 10, c: ["c1", "c2", "c3"], d: {d1: 1, d2: 2, d3: 3}}

console.log(obj2);
["a", "b", {c: false}]

console.log(obj3);
"test"

В этом примере мы инициализируем три переменные, которые содержат строки в формате JSON. С помощью метода JSON.parse() мы анализируем переданные строки и инициализируем переменные, полученным значением. Для демонстрации работы метода JSON.parse() выводим полученные значения в консоль.

Использование функции для преобразования JSON

В этом примере мы рассмотрим использование второго аргумента метода JSON.parse() - функции, которая позволяет преобразовать значение, полученное в ходе анализа перед его возвращением из метода:

// инициализируем переменную, содержащую строку в формате JSON
const jsonString = '{"a": 1,"b": false,"c": "3"}';

// преобразуем значение, полученное в ходе анализа таким образом, что оставляем только те свойства значения которых не являются числами
const obj = JSON.parse( jsonString, (key, val) => typeof val !== "number" ? val : undefined );
console.log(obj);
{b: false, c: "3"}

// преобразуем значение, полученное в ходе анализа таким образом, что оставляем только те свойства значения которых являются числами
const obj2 = JSON.parse( jsonString, (key, val) => typeof val === "number" || key === "" ? val : undefined );
console.log(obj2);
{a: 1}

// преобразуем значение, полученное в ходе анализа таким образом, что изменяем все числовые значения на 777
const obj3 = JSON.parse( jsonString, (key, val) => typeof val === "number" ? val = 777 : val );
console.log(obj3);
{a: 777, b: false, c: "3"}

// преобразуем значение, полученное в ходе анализа таким образом, что изменяем значение свойства "b" на "deleted"
const obj4 = JSON.parse( jsonString, (key, val) => key === "b" ? val = "deleted" : val );
console.log(obj4);
{a: 1, b: "deleted", c: "3"}

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

Глубокое копирование объекта

Глубокое копирование объекта в отличии от поверхностного дублирует каждый встреченный ею объект, то есть копия и исходный объект не будут разделять общие элементы, поэтому она в действительности будет являться полноценной копией оригинала.

Давайте рассмотрим как с помощью методов JSON.parse() и JSON.stringify() сделать глубокую копию нашего объекта:

// инициализируем переменную, содержащую объект
let obj = {
    a: 1,
    b: {
      c: 2
    }
};

// осуществляем глубокое копирование объекта и инициализируем переменную
let newObj = JSON.parse( JSON.stringify( obj ) );
console.log( newObj );  // переменная содержит значение { a: 1, b: { c: 2} }

obj.b.c = 200;          // изменяем значение свойства объекта obj
console.log( obj );     // переменная содержит значение { a: 1, b: { c: 200} }
console.log( newObj );  // переменная содержит значение { a: 1, b: { c: 2} } 

В этом примере с использованием метода JSON.stringify() мы преобразовали значение переменной obj в строку JSON, а с помощью метода JSON.parse() анализируем эту строку и возвращаем новый объект, соответствующий переданной строке. В результате чего, свойства, значением которых является объект имеют собственные значения, а не ссылаются на первоначальный объект. Благодаря этим преобразованиям мы получаем новый объект, который является действительно полноценной копией оригинала.

JavaScript JSON
×

Кажется, вы используете блокировщик рекламы :(

Этот ресурс не является коммерческим проектом и развивается на энтузиазме автора сайта, который посвящает все свое свободное время этому проекту.

Добавьте, пожалуйста, basicweb.ru в исключения блокировщика рекламы, этим вы поможете развитию проекта.