JSON.stringify()
方法 JSON.stringify(student) 接收对象并将其转换为字符串。
例如,在这里我们 JSON.stringify 一个 student 对象:
let student = {
name: 'John',
age: 30,
isAdmin: false,
courses: ['html', 'css', 'js'],
spouse: null
};
let json = JSON.stringify(student);
alert(typeof json); // we've got a string!
alert(json);
/* JSON 编码的对象:
{
"name": "John",
"age": 30,
"isAdmin": false,
"courses": ["html", "css", "js"],
"spouse": null
}
*/
请注意,JSON 编码的对象与对象字面量有几个重要的区别:
字符串使用双引号。JSON 中没有单引号或反引号。所以 'John' 被转换为 "John"。
对象属性名称也是双引号的。这是强制性的。所以 age:30 被转换成 "age":30。
toJSON()
toJSON() 是 JavaScript 中的一个方法,用于自定义对象在被序列化为 JSON 字符串时的行为。它是对象的一个内置方法,当对象被传递给 JSON.stringify() 方法进行 JSON 序列化时,如果对象具有 toJSON() 方法,那么该方法将被调用。toJSON() 方法应该返回一个可序列化为 JSON 的值,可以是对象、数组、字符串、数字、布尔值或 null。
以下是一个使用 toJSON() 方法的示例:
const obj = {
name: 'John',
age: 30,
toJSON() {
return {
name: this.name,
age: this.age,
customField: 'Some custom value'
};
}
};
const jsonString = JSON.stringify(obj);
console.log(jsonString);
输出结果为:
{"name":"John","age":30,"customField":"Some custom value"}
在上述示例中,obj 对象定义了一个 toJSON() 方法。当 JSON.stringify() 方法将 obj 对象转换为 JSON 字符串时,会调用 toJSON() 方法,并返回该方法的返回值作为序列化结果。
当调用 JSON.stringify() 方法时,如果要序列化的对象没有 toJSON() 方法,JSON.stringify() 方法将使用默认的序列化行为来处理对象。默认情况下,JSON.stringify() 方法会遍历对象的可枚举属性,并将它们转换为对应的 JSON 值。
以下是一个没有 toJSON() 方法的对象的示例:
const obj = {
name: 'John',
age: 30,
hobbies: ['reading', 'coding']
};
const jsonString = JSON.stringify(obj);
console.log(jsonString);
输出结果为:
{"name":"John","age":30,"hobbies":["reading","coding"]}