Postman未自动格式化JSON响应,首要检查服务器返回的Content-Type响应头是否为application/json;若非此值(如text/plain),则Postman默认以Raw视图显示,即使内容是合法JSON;可手动在Body右上角下拉菜单选JSON强制格式化,但根治需后端修正响应头或在Tests中用JSON.parse(responseBody)替代pm.response.json()。

Postman没自动格式化JSON响应,先看Content-Type头
Postman是否把响应体当JSON处理,完全取决于服务器返回的Content-Type响应头。如果它不是application/json(或带+json后缀的变体),Postman默认走Raw视图,哪怕内容确实是合法JSON。
常见错误现象:响应体明明是{"data":{"token":"abc"}},却只显示为一行无缩进、无高亮的纯文本,pm.response.json()在Tests里报SyntaxError: Unexpected token。
- 点开
Headers标签页,确认Content-Type值是不是application/json;如果不是,比如是text/plain或application/octet-stream,那Postman根本不会尝试解析 - 临时解决:点击Body面板右上角的
Pretty下拉菜单,手动选JSON——这能强制格式化,但不改变pm.response.json()的行为 - 根治办法:让后端修正响应头;若不可控,可在Tests中用
JSON.parse(responseBody)代替pm.response.json()(注意捕获异常)
pm.response.json()报错Cannot read property 'data' of null
这个错误说明pm.response.json()返回了null,不是JSON结构问题,而是解析本身失败了。典型原因有三个:
- 响应体开头含BOM字节(如UTF-8 with BOM),
JSON.parse()会直接失败;可在Tests里加console.log(responseBody.substring(0,5))看前几个字符是不是\ufeff{ - 响应体实际是HTML错误页(比如401跳转到登录页),但
Content-Type误设为application/json;此时responseBody是HTML字符串,JSON.parse必然炸 - 响应被gzip压缩但
Content-Encoding头缺失或错误,Postman无法解压,传给JSON.parse的是乱码二进制
验证方式:切到Raw视图,肉眼确认内容是否真为JSON;再切回Pretty,看是否有“Failed to format JSON”提示。
双层嵌套JSON(如{"code":0,"data":{"id":123}})怎么取id
不能直接写pm.response.json().data.id就完事——得先确保解析成功,再分步取值,否则任何一层为undefined都会报错。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
推荐写法(带防御):
const res = pm.response.json();
if (res && typeof res === 'object' && res.data && typeof res.data === 'object') {
pm.environment.set('user_id', res.data.id);
}
- 别依赖
responseBody.match()正则提取,JSON结构稍变就失效;JSON.parse+ 属性访问才是正途 - 如果
data字段本身是字符串(比如"{\"id\":123}"),需二次JSON.parse(res.data),这种情况多见于后端序列化错误 - 环境变量/全局变量赋值时,务必检查值是否存在,否则后续请求可能因
{{user_id}}为空导致400
Preview视图里JSON显示为[object Object],不是格式问题而是渲染限制
Preview视图本质是iframe沙盒,它不执行JS,也不支持JSON.stringify渲染。所以即使响应是JSON,Preview也只会调用toString(),结果就是[object Object]。
这不是Bug,是设计使然:
-
Preview只适合HTML、图片、PDF等可直接渲染的内容;对JSON/XML,它毫无意义 - 看到
[object Object]就立刻切回Pretty或Raw——这是唯一靠谱的查看方式 - 如果想在测试脚本里“可视化”某字段,用
console.log(JSON.stringify(value, null, 2))输出到Console更直接
真正容易被忽略的是:当你在Tests里反复修改pm.response.json()相关逻辑时,Postman不会自动刷新Pretty视图的格式化状态——必须手动点一下Pretty标签或切换视图才能触发重解析。










