理解与格式化 JSON 字符串是每个前端开发者常用的技能。将压缩或紧凑的 JSON 转换为带缩进、易阅读的格式,不仅方便调试,也可用于用户界面展示。在本文中,我们将详细介绍如何使用 JavaScript 实现 JSON 字符串的格式化。
使用 JSON.stringify 格式化 JSON
JavaScript 内置的 JSON.stringify() 方法支持将对象或数组转换为字符串,并通过第三个参数设置缩进量。例如:
const data = { name: "Alice", age: 30, hobbies: ["Reading", "Travel"] };
const formatted = JSON.stringify(data, null, 2);
console.log(formatted);
输出结果类似:
{
"name": "Alice",
"age": 30,
"hobbies": [
"Reading",
"Travel"
]
}
在这个用法中:
- 第一个参数是对象。
- 第二个参数用于 replacer(可设置为 null)。
- 第三个参数控制每一级的缩进空格数量,比如 2 表示每层缩进 2 个空格,也可以使用 '\t' 制表符。
格式化已有的 JSON 字符串
如果你手头已有一个紧凑的 JSON 字符串,可先将其解析成对象,再重新格式化:
const raw = '{"id":1,"user":"Bob","active":true}';
const obj = JSON.parse(raw);
const pretty = JSON.stringify(obj, null, 4);
console.log(pretty);
这样你就能得到包含 4 个空格缩进的可读格式。
进阶用法:定制格式或高亮显示
你还可以用 replacer 参数自定义筛选规则;或者实现带颜色的高亮展示,比如将格式化结果渲染为 HTML,并用 CSS 高亮不同类型的数据。例如:
function syntaxHighlight(json) {
json = JSON.stringify(json, undefined, 4);
// 再用正则替换不同数据类型包裹颜色标签
return json.replace(/("(\\u[a-fA-F0-9]{4}|\\[^u]|[^\\"])*"(?:\s*:)?|\b(true|false|null)\b|-?\d+(\.\d*)?([eE][+\-]?\d+)?)/g,
match => {
let cls = 'number';
if (/^"/.test(match)) {
cls = /:$/.test(match) ? 'key' : 'string';
} else if (/true|false/.test(match)) {
cls = 'boolean';
} else if (/null/.test(match)) {
cls = 'null';
}
return `<span class="${cls}">${match}</span>`;
}
);
}
应用场景与优势
调试阶段:格式化 JSON 有助于快速定位和理解数据结构。
用户界面展示:在网页上清晰展示 JSON 数据,提升可读性与体验。
日志记录:在控制台或日志文件中保存整洁的 JSON,便于排查问题。
小结与最佳实践
使用内置 JSON.stringify(obj, null, space) 是格式化 JSON 的最简方式。根据需求选择合适的缩进长度(如 2、4 个空格或 tab),如果有特殊格式需求,可利用 replacer 和语法高亮渲染技巧。对于大多数开发场景,这种方法兼顾简洁与灵活,推荐广泛采用。