Чтение онлайн

ЖАНРЫ

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Пример

// Создает полную копию любого объект или массива, который может быть

// представлен в формате JSON

function deepcopy(o) { return JSON.parse(JSON.stringify(o)); }

См. также

JSON.parse, JSON.stringify, раздел 6.9, http://json.org

JSON.parse (ECMAScript 5)

выполняет анализ строки в формате JSON

Синтаксис

JSON.parse(s)

JSON.parse(s, reviver)

Аргументы

s

Анализируемая строка.

reviver Необязательная функция, способная преобразовывать значения, полученные в ходе анализа.

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

Объект, массив или элементарное значение, полученное в результате анализа строки s (и, возможно, измененное функцией reviver).

Описание

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

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

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

JSON.parse
вернет его вызывающей программе.

Пример

Во многих случаях использование

JSON.parse
выглядит достаточно просто:

var data = JSON.parse(text);

Функция

JSON.stringify
преобразует объекты
Date
в строки, а вы с помощью собственной функции reviver можете выполнять обратное преобразование. Пример ниже также фильтрует свойства по их именам и возвращает undefined, чтобы удалить определенные свойства из полученного объекта:

var data JSON.parse(text, function(name, value) {

// Удалить свойства, имена которых начинаются с символа подчеркивания

if (name[0] == '_') return undefined;

// Если значение является строкой в формате представления дат ISO 8601,

// преобразовать его в объект Date,

if (typeof value === "string" &&

/Ad\d\d\d-\d\d-\d\dT\d\d :\d\d: \d\d. \d\d\dZ$/.test(value))

return new Date(value);

// Иначе вернуть неизмененное значение

return value

});

См. также

JSON.stringify, раздел 6.9

JSON.stringify (ECMAScript 5)

сериализует объект, массив или элементарное значение

Синтаксис

JSON.stringify(o)

JSON.stringify(o, filter)

JSON.stringify(o, filter, indent)

Arguments

о

Объект, массив или элементарное значение, которое требуется преобразовать в строку в формате JSON.

filter Необязательная функция, которая может изменять значения перед сериализацией, или массив имен свойств, подлежащих сериализации.

indent Необязательный аргумент, определяющий строку или число пробелов для оформления отступов, когда требуется применить форматирование для удобочитаемости. Если отсутствует, возвращаемая строка не содержит дополнительных пробелов, но вполне понятна для человека.

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

Cстрока в формате JSON представляющая значение о после применения фильтра filter и отформатированная с применением indent.

Описание

Функция

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

Когда функция

JSON.stringifу
вызывается с единственным аргументом и когда в нем передается объект, массив, строка, число, логическое значение или значение null, сериализация выполняется очень просто. Однако, когда значение для сериализации содержит объекты, являющиеся экземплярами класса, процесс сериализаци усложняется. Если функция
JSON.stringify
встретит объект (или массив) с методом
toJSON,
она вызовет этот метод и выполнит сериализацию полученного в результате значения, а не самого объекта. Она вызывает метод
toJS0N
с единственным строковым аргументом, в котором передается имя свойства объекта или индекс массива. Класс
Date
определяет метод
toJSON,
преобразующий объекты
Date
в строки с помощью метода
Date.toISOString
. Никакие другие классы, встроенные в язык JavaScript, не определяют метод
toJSON,
но вы можете определить его в своих классах. Помните, что несмотря на свое имя, метод
toJSON
не выполняет сериализацию объекта: он просто возвращает значение, которое будет подвергнуто сериализации вместо оригинального объекта. Второй аргумент функции
JSON.stringify
позволяет добавить в процесс сериализаци второй слой фильтрации. Этот необязательный аргумент может быть функцией или массивом и предоставляет возможность реализации двух разных способов фильтрации. Если передать во втором аргументе функцию, она будет использоваться как инструмент замены, подобно методу
toJSON,
описанному выше. Эта функция будет вызываться для каждого значения, подлежащего сериализации. Ключевое слово this внутри этой функции замены будет ссылаться на объект или массив, в котором определено текущее значение. Первым аргументом функции замены будет передаваться имя свойства объекта или индекс в массиве для текущего значения, а во втором - само значение. Это значение будет замещено возвращаемым значением функции. Если функция вернет undefined или вообще ничего не вернет, то это значение (и соответствующее ему свойство объекта или элемент массива) будет исключено из сериализации.

Если во втором аргументе передать массив строк (или чисел - они будут преобразованы в строки), эти строки будут использоваться как имена свойств объекта. Любое свойство, имя которого отсутствует в массиве, будет исключено из сериализации. Кроме того, возвращаемая строка будет содержать свойства в том же порядке, в каком они перечислены в массиве.

Функция

JSON.stringify
обычно возвращает строку без дополнительных пробелов и символов перевода строки. Если желательно сделать результат более удобочитаемым, можно передать третий агумент. Если указать в нем число от 1 до 10, функция
JSON.stringify
вставит символы перевода строки и будет использовать указанное число пробелов для оформления отступов на каждом «уровне» вложенности. Если в этом аргументе передать непустую строку, функция
JSON.stringify
вставит символы перевода строки и будет использовать указанную строку (но не более 10 первых символов из нее) для оформления отступов.

Поделиться с друзьями: