JSON.stringify()第三个参数控制缩进:传正整数用空格(如2、4),传字符串如"\t"用制表符;第二个参数replacer可过滤字段或处理不可序列化值。

用 JSON.stringify() 的第三个参数控制缩进即可,这是最直接、标准的方法。
使用空格缩进(推荐)
第三个参数传入一个正整数,表示每个层级缩进的空格数:
-
JSON.stringify(obj, null, 2)→ 每级缩进 2 个空格 -
JSON.stringify(obj, null, 4)→ 每级缩进 4 个空格
例如:
const obj = { name: "Alice", hobbies: ["reading", "coding"] };console.log(JSON.stringify(obj, null, 2));
输出:
立即学习“Java免费学习笔记(深入)”;
{"name": "Alice",
"hobbies": [
"reading",
"coding"
]
}
使用制表符缩进
第三个参数也可以传入字符串(如 "\t"),每级会用该字符串缩进:
-
JSON.stringify(obj, null, "\t")→ 用 Tab 缩进 - 支持任意字符串,比如
" "(两个全角空格)也能用,但不常用
注意:字符串长度不限,但只取前 10 个字符。
配合第二个参数做选择性序列化
如果只想输出部分字段,可结合第二个参数(replacer)过滤:
- 传入数组:指定要保留的键名,如
["name", "age"] - 传入函数:对每个键值对自定义处理逻辑
例如:
JSON.stringify({ name: "Bob", secret: "xxx", age: 30 }, ["name", "age"], 2)输出:{\n "name": "Bob",\n "age": 30\n}
安全处理无法序列化的值
遇到 undefined、函数、Symbol 或循环引用时,JSON.stringify 默认会忽略或报错。可提前用 replacer 函数兜底:
- 返回
undefined表示跳过该属性 - 返回字符串/数字/布尔等基础类型,会被正常序列化
- 对
function或undefined显式转成null或描述性字符串
例如:
JSON.stringify(obj, (key, value) =>typeof value === "function" ? "[Function]" :
value === undefined ? null : value,
2);


















