JSON.stringify
是 JavaScript 中的一个方法,用于将一个 JavaScript 对象或值转换为一个 JSON 字符串。以下是一些使用 JSON.stringify
的基本用法和示例:
基本用法
let obj = { "name": "John", "age": 30, "city": "New York" };
let myJSON = JSON.stringify(obj);
console.log(myJSON);
上述代码会输出:{"name":"John","age":30,"city":"New York"}
包含样式的字符串
JSON.stringify
可以接受一个可选参数,被称为 “replacer”。这个参数可以是一个函数,用于过滤将要被序列化的对象属性,或者是一个数组,用于指定要序列化的属性。
let obj = { "name": "John", "age": 30, "city": "New York" };
let myJSON = JSON.stringify(obj, ["name", "city"]);
console.log(myJSON);
上述代码会输出:{"name":"John","city":"New York"}
,注意只有 “name” 和 “city” 属性被序列化了。
包含函数
如果要将函数或者包含函数的对象序列化为 JSON,需要使用 JSON.stringify
的第三个参数,被称为 “space”(空格)。它将用于在输出中插入空格和换行符,以使其更易于阅读。
let obj = { "name": "John", "age": 30, "sayHello": function() { return "Hello"; } };
let myJSON = JSON.stringify(obj, null, 2);
console.log(myJSON);
上述代码会输出:
{
"name": "John",
"age": 30,
"sayHello": function() { return "Hello"; }
}
注意,函数并没有被序列化,因为 JSON 是一个数据交换格式,不包括函数或方法。如果你需要将包含函数的对象转换为 JSON,你需要自己创建一个新的对象,将需要序列化的属性复制到新的对象中,并删除函数。
处理循环引用
在某些情况下,对象可能会引用自身。在这种情况下,JSON.stringify
会返回 TypeError
。要处理这种情况,可以提供一个可选的参数,被称为 “circularReplacer”。这个参数是一个函数,如果对象有循环引用,该函数将被调用。你可以在这个函数中处理循环引用。
let obj = {};
obj.circular = obj;
let myJSON = JSON.stringify(obj, null, 2);
console.log(myJSON);
默认情况下,上述代码会抛出 TypeError
。为了处理这种情况,你可以提供一个 “circularReplacer” 函数:
let obj = {};
obj.circular = obj;
let myJSON = JSON.stringify(obj, null, 2, function(key, value) {
if (this === value) { return "[self reference]"; }
return value;
});
console.log(myJSON);
@漏刻有时