必须为Postman变量加双引号才能用于JSON字段,因JSON要求字符串必须用双引号包裹;直接写{{variable}}会导致缺失引号而解析失败,正确做法是在预请求脚本中用JSON.stringify()序列化后存入环境变量。

Postman 里直接把变量塞进 JSON 字段,不加引号就报错——因为 JSON 要求字符串必须带双引号,而 pm.environment.set() 存的变量默认是原始类型(比如数字、布尔、对象),不是字符串。
JSON 中引用变量时,字符串值没引号就解析失败
常见错误现象:JSON.parse() 报错 SyntaxError: Unexpected token x in JSON at position 1,或后端收到 {"id": 123} 被当成 {"id": 123}(数字)而非预期的 {"id": "123"}(字符串)。
原因:Postman 变量在 JSON raw body 中被直接替换,比如你写 {"user_id": {{user_id}}},而 user_id 是环境变量值 abc123,最终发出去的是 {"user_id": abc123} —— 缺少引号,非法 JSON。
- 永远不要在 raw JSON 中裸写
{{variable}},除非你 100% 确认该变量值本身是合法 JSON 字符串(含引号) - 如果变量来自响应解析(如
pm.environment.set("token", data.token)),它存的是纯字符串值,不含外层引号 - 解决思路:让变量“自己带上引号”,即用
JSON.stringify()包一层再存
预请求脚本中用 JSON.stringify() 序列化变量再存入环境
适用场景:你需要把一个对象、数组或带特殊字符的字符串变量,安全地放进后续请求的 JSON body 里。
例如登录接口返回 {"data": {"user_id": "U-7x9a", "roles": ["admin"]}},你想在下一个请求中发送 {"target_user": "U-7x9a", "with_roles": ["admin"]}:
const resp = pm.response.json();
// ✅ 正确:序列化后再存,保证是带引号的 JSON 字符串
pm.environment.set("target_user_str", JSON.stringify(resp.data.user_id));
pm.environment.set("roles_str", JSON.stringify(resp.data.roles));
// ❌ 错误:直接存原始值,后续插入 JSON 会缺引号
// pm.environment.set("target_user", resp.data.user_id);
然后在 Body → raw → JSON 中写:
{
"target_user": {{target_user_str}},
"with_roles": {{roles_str}}
}
pm.variables.replaceIn() 不适用于 JSON 字段拼接
有人试过在 Pre-request Script 里用 pm.variables.replaceIn('{{my_obj}}') 想“动态生成 JSON”,但这个方法只做简单文本替换,不会做 JSON 安全转义,遇到 "、\n、 等字符会直接崩。
-
replaceIn()适合 URL 参数、Headers 值等非结构化文本 - JSON body 必须走
JSON.stringify()+ 环境变量存储 这条路径 - 如果变量本身是对象(比如
{name: "Alice", age: 28}),也必须先JSON.stringify(obj)再存,否则取出来仍是 object,无法直接插进 raw JSON
调试时怎么确认变量是否已正确加引号
最容易忽略的一点:你以为存对了,其实没生效。快速验证方式:
- 在 Pre-request Script 末尾加
console.log(pm.environment.get("target_user_str"));,看控制台输出是否是"U-7x9a"(带双引号的字符串)而不是U-7x9a(无引号) - 发送请求前,点 Body 右下角的
Beautify,如果 JSON 高亮正常、没红标错误,说明变量已正确展开为合法 JSON 片段 - 检查响应体或抓包(如用 Charles/Fiddler),确认实际发出的 body 字符串是否符合 JSON 规范
真正卡住人的往往不是语法,而是变量存的时候没 stringify,取的时候又忘了它本该是字符串——结果一半逻辑在 JS 脚本里,一半在 raw JSON 里,两边类型对不上。


















