This translation is incomplete. Please help translate this article from English.
Общее
Метод JSON.stringify() преобразует значение в jSON строку, опционально возможно изменение существующих свойств и добавление новых в процессе преобразования.
Синтаксис
JSON.stringify(value[, replacer [, space]])
Параметры
-
value - Значение, которое будет преобразовано в jSON строку.
-
replacerOptional -
Если функция, то преобразует значения и свойства по ходу трансформации в строку; если массив, то определяет набор свойств, которые попадут в конечную строку.
Подробное описание доступно в статье руководства по JavaScript Using native JSON. -
spaceOptional - Делает результат красиво отформатированным (расставляя пробелы).
Описание
JSON.stringify преобразует значение в jSON со следующими оговорками:
- Порядок преобразования свойств объектов, не являющихся массивами не гарантируется. Не пологайтесь на порядок свойств во время преобразования
- Boolean, Number, и String преобразуются в соответствующие значения-примитивы в соответствии с традиционным соглашением о семантике преобразований.
- Значение
undefined, функция, или символ (Symbol), встреченные во время преобразования, будут либо опущены (если это объект), либо превращены в null (если это массив). - Все свойства, имеющие ключ в виде символа (Symbol) будут полностью проигнорированы, даже при использовании функции
replacer.
JSON.stringify({}); // '{}'
JSON.stringify(true); // 'true'
JSON.stringify("foo"); // '"foo"'
JSON.stringify([1, "false", false]); // '[1,"false",false]'
JSON.stringify({ x: 5 }); // '{"x":5}'
Examples:
var JavascriptObject = {name: "George", lastname: "Batalinski"};
var ValidJSON = JSON.stringify({name: "George", lastname: "Batalinski"});
JSON.stringify({x: 5, y: 6});
// '{"x":5,"y":6}' or '{"y":6,"x":5}'
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
// '[1,"false",false]'
// Symbols:
JSON.stringify({x: undefined, y: Object, z: Symbol("")});
// '{}'
JSON.stringify({[Symbol("foo")]: "foo"});
// '{}'
JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
// '{}'
JSON.stringify({[Symbol.for("foo")]: "foo"}, function (k, v) {
if (typeof k === "symbol"){
return "a symbol";
}
});
// '{}'
Аргумент определяющий отступ
Аргумент определяющий отступ можно использовать для контроля за форматированием отступов в конечной строке. Если передано число, то каждый последующий уровень вложенности будет дополнен отступом из пробелов, количество которых соответствует числу (до 10 пробелов). Если передана строка, то отступы будут соответствовать этой строке (либо первым 10 её символам).
JSON.stringify({ a: 2 }, null, " "); // '{\n "a": 2\n}'
Использование tab-символа имитирует стандартный вид при использовании красивого форматирования:
JSON.stringify({ uno: 1, dos : 2 }, null, '\t')
// returns the string:
// '{ \
// "uno": 1, \
// "dos": 2 \
// }'
toJSON поведение
Если объект, преобразуемый в строку имеет в себе свойство с именем toJSON, значение которого является функцией, то метод toJSON изменит стандартное поведение: вместо преобразования переданного объекта мы получим результат, возвращенный функцией toJSON. Например:
var obj = {
foo: 'foo',
toJSON: function () {
return 'bar';
}
};
JSON.stringify(obj); // '"bar"'
JSON.stringify({x: obj}); // '{"x":"bar"}'
Пример использования JSON.stringify связке с localStorage
В случае, когда вы хотите сохранить созданный объект таким образом, чтобы его можно было восстановить даже после закрытия браузера, имеет смысл воспользоваться следующим примером:
Функции не являются валиднымм типом jSON данных, поэтому они не сработают. Так же, некоторые виды объектов, такие как Date будут преобразованы в строку после применения JSON.parse()
// Creating an example of JSON
var session = {
'screens' : [],
'state' : true
};
session.screens.push({"name":"screenA", "width":450, "height":250});
session.screens.push({"name":"screenB", "width":650, "height":350});
session.screens.push({"name":"screenC", "width":750, "height":120});
session.screens.push({"name":"screenD", "width":250, "height":60});
session.screens.push({"name":"screenE", "width":390, "height":120});
session.screens.push({"name":"screenF", "width":1240, "height":650});
// Converting the JSON string with JSON.stringify
// then saving with localStorage in the name of session
localStorage.setItem('session', JSON.stringify(session));
// Example of how to transform the String generated through
// JSON.stringify and saved in localStorage in JSON object again
var restoredSession = JSON.parse(localStorage.getItem('session'));
// Now restoredSession variable contains the object that was saved
// in localStorage
console.log(restoredSession);
Пример использования параметра replacer у JSON.stringify(javascriptObject, method);
function replacer(key, value) {
if (typeof value === "string") {
return undefined;
}
return value;
}
var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo, replacer);
Спецификация
| Спецификация | Статус | Комментарий |
|---|---|---|
| ECMAScript 5.1 (ECMA-262) Определение 'JSON.stringify' в этой спецификации. |
Стандарт | Первое определение. Реализовано in JavaScript 1.7. |
| ECMAScript 6 (ECMA-262) Определение 'JSON.stringify' в этой спецификации. |
Черновик |
Совместимость с браузерами
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | (Да) | 3.5 (1.9.1) | 8.0 | 10.5 | 4.0 |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | (Да) | (Да) | 1.0 (1.0) | (Да) | (Да) | (Да) |
Based on Kangax's compat table.