JSON.stringify()方法用于将JavaScript对象转换为一个JSON字符串。它有以下用法:
- 将对象转换为JSON字符串
let obj = { name: "John", age: 30 }; let jsonStr = JSON.stringify(obj); console.log(jsonStr); // {"name":"John","age":30}
- 控制属性的输出
可以使用第二个参数来控制属性的输出。
let obj = { name: "John", age: 30 }; let jsonStr = JSON.stringify(obj, ["name"]); console.log(jsonStr); // {"name":"John"}
let obj = { name: "John", age: 30 }; let jsonStr = JSON.stringify(obj, (key, value) => { if (key === "name") { return value.toUpperCase(); } return value; }); console.log(jsonStr); // {"name":"JOHN","age":30}
- 美化输出
可以使用第三个参数来实现美化输出。
let obj = { name: "John", age: 30 }; let jsonStr = JSON.stringify(obj, null, 2); console.log(jsonStr); /* { "name": "John", "age": 30 } */
- 处理循环引用
如果对象存在循环引用,可以使用第二个参数的replacer函数来处理。
let obj = { name: "John" }; obj.self = obj; let jsonStr = JSON.stringify(obj, (key, value) => { if (key === "self") { return undefined; } return value; }); console.log(jsonStr); // {"name":"John"}
- 序列化Date对象
默认情况下,Date对象会被转换为ISO 8601格式的字符串。
let obj = { date: new Date() }; let jsonStr = JSON.stringify(obj); console.log(jsonStr); // {"date":"2021-11-10T12:00:00.000Z"}
可以使用replacer函数来自定义Date对象的序列化方式。
let obj = { date: new Date() }; let jsonStr = JSON.stringify(obj, (key, value) => { if (value instanceof Date) { return value.getTime(); } return value; }); console.log(jsonStr); // {"date":1636550400000}
注意:JSON.stringify()方法无法处理函数、正则表达式、undefined等特殊类型的数据。