Postman动态生成JSON请求体必须用JSON.stringify()转字符串赋值给pm.request.body.raw或用update()方法,严禁直接赋对象;需确保双引号、无尾逗号、过滤undefined/null,并为环境变量和时间戳设兜底。

Postman 动态生成整个 JSON 请求体,核心就一条:必须用 pm.request.body.update() 或直接赋值 pm.request.body.raw,且内容必须是合法 JSON 字符串 —— 不能是对象,不能漏引号,不能用中文逗号。
为什么直接写对象会失败
常见错误是这样写:
pm.request.body.raw = {
"userId": 1001,
"timestamp": Date.now()
};这会导致请求体变成 [object Object],后端收不到任何字段。因为 raw 接收的是字符串,不是 JS 对象。
正确做法只有两种:
- 用
JSON.stringify()转成字符串(推荐,可控性强) - 用模板字符串拼接(适合结构简单、变量少的场景)
别碰 pm.request.body.json —— Postman 没这个属性,写了也不生效。
pm.request.body.update() 和直接赋值 raw 的区别
update() 是官方推荐方式,它会自动处理 Content-Type、格式识别和 UI 同步;直接赋值 raw 更底层,但需要手动确保 header 里有 Content-Type: application/json。
实操建议:
- 如果你在 Body 标签页已手动选了
raw + JSON,用pm.request.body.raw = JSON.stringify(...)最稳妥 - 如果想完全脚本控制(比如从集合变量读配置再生成),用
pm.request.body.update({mode: 'raw', raw: jsonString}) - 两者都要求
jsonString是合法 JSON:双引号、无尾逗号、无 undefined 值
示例(安全写法):
const data = {
orderId: 'ORD_' + Date.now(),
userId: pm.environment.get('userId') || 'guest',
items: [{ id: 'P001', qty: 2 }]
};
pm.request.body.raw = JSON.stringify(data, null, 2);容易被忽略的三个坑
动态生成 JSON 时,以下问题高频出现且难定位:
-
undefined或null字段没过滤:JSON.stringify 会保留null,但把undefined键直接删掉,导致字段缺失却不报错 - 环境变量为空时没兜底:
pm.environment.get('token')返回undefined,拼进 JSON 后变成"token":null或字段消失 - 时间戳或随机数重复:同一集合里多个请求共用一个
Date.now(),若没加Math.random()或微秒级精度,签名/ID 可能撞车
建议统一加校验:
const safeStr = (val) => val === undefined || val === null ? '' : String(val);
const timestamp = Date.now();
const orderId = `ORD_${timestamp}_${Math.floor(Math.random() * 1000)}`;
真正麻烦的不是写脚本,而是让每次生成的 JSON 既符合业务规则(比如签名排序、字段必填)、又不因变量缺失崩掉 —— 这得靠提前 mock 空值场景,而不是等接口返回 400 才去翻 console。

















