Postman中变量插值{{var}}仅支持字符串,对象需JSON.stringify()存储、JSON.parse()解析;嵌套字段须拆分为独立变量;所有get()返回均为字符串,必须显式序列化/反序列化。

Postman用pm.globals.set()存对象,下个请求{{var_name}}取出来却是字符串
这不是 Postman 的 bug,而是变量插值机制的必然行为:{{xxx}} 只能展开为字符串,不管原始值是对象、数组还是数字,都会被强制 toString() —— 对象变成 [object Object],数组变成逗号拼接串,这在实际联调中极易导致签名失败或 400 错误。
- 别在
Tests里用pm.globals.set("user", {id: 1, name: "张三"})存整个对象 - 需要传结构化数据时,必须手动序列化再存储:
pm.globals.set("user_json", JSON.stringify({id: 1, name: "张三"})) - 下游请求若需作为 JSON Body 发送,Body → raw →
JSON,内容填{{user_json}}即可原样还原 - 若需在 Pre-request Script 中读取并修改,用
JSON.parse(pm.globals.get("user_json"))解析,改完再JSON.stringify()回存
想在下一个接口的 Headers 或 URL 参数里用对象字段,但{{obj.field}}不生效
Postman 的变量语法不支持点号路径解析,{{user.name}} 这种写法永远返回空字符串或报错。它只认一级变量名,不解析嵌套结构。
- 必须提前把需要的字段单独提取并设为独立变量:
const user = JSON.parse(responseBody);pm.globals.set("user_id", user.id);pm.globals.set("user_token", user.token); - URL 参数中直接写
?id={{user_id}}&token={{user_token}} - Headers 中 Key/Value 都支持
{{xxx}},但同样只接受一级变量名 - 如果字段层级深(如
data.items[0].title),务必在脚本里用标准 JS 安全取值,加?.或判空,避免Cannot read property 'xxx' of undefined
用pm.environment.set()存对象后,在 Tests 里pm.environment.get()拿到的是字符串
这是变量存储层的统一行为:Postman 所有环境/全局变量底层都以字符串形式持久化。即使你传入对象,get() 返回的也一定是字符串——哪怕你没手动 JSON.stringify(),它也会隐式调用 toString()。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 存的时候不显式
JSON.stringify(),取的时候JSON.parse()必然报错(因为得到的是[object Object]) - 正确链路只有两条:
① 存字符串 → 取字符串 → 直接用(适合简单值)
② 存
JSON.stringify(obj)→ 取字符串 →JSON.parse(str)→ 得到对象(适合结构化数据) - 别依赖
typeof pm.globals.get("x") === "object",它永远是"string" - 调试时用
console.log(typeof pm.globals.get("x"), pm.globals.get("x"))看清真实类型和内容
Pre-request Script 中修改已存的 JSON 字符串变量,但改完没生效
常见原因是忘记重新 set() 回去。Postman 变量不是引用传递,get() 出来的是副本,改完不 set() 就等于白改。
- 典型错误写法:
let data = JSON.parse(pm.globals.get("payload"));data.timestamp = Date.now(); // ✅ 改了// ❌ 忘了 set 回去 - 正确写法:
let data = JSON.parse(pm.globals.get("payload"));data.timestamp = Date.now();pm.globals.set("payload", JSON.stringify(data)); - 如果变量在环境里,把
pm.globals换成pm.environment - 注意:
JSON.stringify()会丢掉函数、undefined、Symbol 等非 JSON 安全值,只传纯数据结构
变量插值发生在请求构建阶段,早于任何脚本执行;所有结构化数据流转必须靠显式的序列化/反序列化控制,没有捷径。漏掉一次 JSON.stringify() 或 JSON.parse(),下游就大概率收不到预期格式的数据。

















