怎么打印JSON格式:从基础到进阶的完整指南
在程序开发、数据调试或API交互中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其可读性强、结构清晰而被广泛使用,而“打印JSON格式”是开发者日常操作中高频需求——无论是查看接口返回的原始数据,还是调试代码中的变量结构,清晰规范的JSON打印都能极大提升效率,本文将从基础到进阶,详细介绍不同场景下打印JSON格式的方法及注意事项。
为什么需要规范打印JSON?
在方法之前,先明确“规范打印JSON”的重要性:
- 可读性:未格式化的JSON通常是压缩的(如
{"name":"张三","age":18,"city":"北京"}),手动阅读费力;而格式化后(缩进换行)能清晰展示层级结构(如{"name": "张三","age": 18,"city": "北京"}),便于快速定位数据。 - 调试效率:开发中常需打印变量或接口响应,规范的JSON格式能直观暴露数据类型(如字符串、数字、布尔值)、嵌套结构(对象、数组)甚至潜在错误(如缺失引号、逗号)。
- 数据交互:若需将JSON数据粘贴到文档、日志或前端展示,格式化后的内容更易被其他工具或人员解析。
基础场景:在代码中打印JSON
不同编程语言提供了内置或第三方库来处理JSON打印,核心思路是 “序列化+格式化” ——将数据对象转换为JSON字符串,并通过参数控制缩进、换行等格式。
Python:使用json模块
Python标准库json提供了dump()(写入文件)和dumps()(转为字符串)方法,通过indent参数控制缩进。
示例1:打印格式化JSON字符串
import json
data = {
"name": "张三",
"age": 18,
"hobbies": ["篮球", "编程"],
"address": {
"city": "北京",
"district": "海淀区"
}
}
# 使用dumps()格式化,indent=4表示每级缩进4个空格
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)
输出结果:
{
"name": "张三",
"age": 18,
"hobbies": [
"篮球",
"编程"
],
"address": {
"city": "北京",
"district": "海淀区"
}
}
关键参数:
indent:缩进空格数,非缩进时为None(压缩输出)。ensure_ascii:是否将非ASCII字符(如中文)转为Unicode,设为False可原样输出中文。sort_keys:是否对字典键按字母排序,设为True会统一排序(适合需要固定顺序的场景)。
JavaScript/Node.js:使用JSON.stringify()
JavaScript原生提供JSON.stringify()方法,支持第三个参数控制格式化。
示例1:浏览器控制台打印
const data = {
name: "李四",
age: 20,
hobbies: ["音乐", "旅行"],
address: {
city: "上海",
district: "浦东新区"
}
};
// 直接打印(压缩格式)
console.log(JSON.stringify(data));
// 格式化打印(缩进2空格)
console.log(JSON.stringify(data, null, 2));
输出结果:
// 压缩格式
{"name":"李四","age":20,"hobbies":["音乐","旅行"],"address":{"city":"上海","district":"浦东新区"}}
// 格式化
{
"name": "李四",
"age": 20,
"hobbies": [
"音乐",
"旅行"
],
"address": {
"city": "上海",
"district": "浦东新区"
}
}
进阶用法:replacer参数过滤数据
若需打印部分字段,可通过replacer回调实现:
// 只打印name和age
console.log(JSON.stringify(data, (key, value) => {
return ["name", "age"].includes(key) ? value : undefined;
}, 2));
输出:
{
"name": "李四",
"age": 20
}
Java:使用Jackson或Gson库
Java没有内置JSON处理类,需依赖第三方库(如Jackson、Gson),以Jackson为例:
示例:Maven依赖(pom.xml)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
代码示例:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonPrinter {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = "{\"name\":\"王五\",\"age\":22,\"hobbies\":[\"读书\",\"绘画\"]}";
// 解析为对象后格式化打印
Person person = mapper.readValue(json, Person.class);
String formattedJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(person);
System.out.println(formattedJson);
}
}
class Person {
private String name;
private int age;
private String[] hobbies;
// getter/setter省略
}
输出:
{
"name" : "王五",
"age" : 22,
"hobbies" : [ "读书", "绘画" ]
}
C#:使用Newtonsoft.Json或System.Text.Json
示例(Newtonsoft.Json):
using Newtonsoft.Json;
var data = new {
name = "赵六",
age = 25,
hobbies = new List<string> { "游戏", "电影" }
};
// 格式化打印(缩进4空格)
string formattedJson = JsonConvert.SerializeObject(data, Formatting.Indented);
Console.WriteLine(formattedJson);
输出:
{
"name": "赵六",
"age": 25,
"hobbies": [
"游戏",
"电影"
]
}
进阶场景:命令行与工具打印JSON
若需在非编程环境中打印JSON(如处理API返回的原始数据、查看日志文件),可借助命令行工具或在线工具。
命令行工具:jq(Linux/macOS)
jq是一个轻量级JSON命令行处理器,支持格式化、过滤、转换等操作,是开发者处理JSON的“瑞士军刀”。
安装:
- macOS:
brew install jq - Linux(Ubuntu/Debian):
sudo apt-get install jq
示例:
假设有一个压缩的JSON文件data.json:
{"name":"钱七","age":30,"hobbies":["登山","摄影"],"address":{"city":"广州","district":"天河区"}}
格式化打印:
cat data.json | jq .
- 表示“当前对象”,
jq会自动格式化输出(缩进2空格)。
输出:
{
"name": "钱七",
"age": 30,
"hobbies": [
"登山",
"摄影"
],
"address": {
"city": "广州",
"district": "天河区"
}
}
指定缩进:
cat data.json | jq '. | (if .age > 25 then "成年" else "未成年" end)' # 过滤年龄大于25的人,并添加标记
在线JSON格式化工具
若不方便安装工具,或需临时处理少量JSON,可使用在线工具:
- JSON Formatter & Validator(https://jsonformatter.curiousconcept.com/)
- BeautifyJSON(https://beautifyjson.com/)
使用方法:
- 复制压缩的JSON字符串到输入框;
- 点击“Beautify”或“Format”按钮;
- 复制格式化后的结果。
优点:无需安装,支持实时预览;缺点:敏感数据需谨慎使用。
API调试工具:Postman/Insomnia
在API测试中,接口返回的JSON数据可直接在工具中格式化:
- Postman:在“Body”或“Response”面板中,点击右键选择“Prettify”或“Format JSON”。
- Insomnia:点击响应区域的“Pretty”按钮即可格式化。



还没有评论,来说两句吧...