Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

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

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 первых символов из нее) для оформления отступов.

Примеры

// Простая сериализация

var text = JSON.stringify(data);

// Указать точно, какие поля подлежат сериализации

var text = JSON.stringify(address, ["city”,"state","country"]);

// Указать функцию замены, чтобы можно было сериализовать объекты RegExp

var text = JSON.stringify(patterns, function(key, value) {

if (value.constructor === RegExp) return value.toString;

return value;

});

// Того же эффекта можно добиться иначе:

RegExp.prototype.toJSON = function { return this.toString; }

<
  • Читать дальше
  • 1
  • ...
  • 504
  • 505
  • 506
  • 507
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: