Postman请求JSON体能否使用数值型环境变量?
解决Postman数值变量被编码为字符串的问题
你遇到的这个问题我之前也碰过——Postman的自定义环境变量默认都会被存成字符串类型,哪怕你存的是数字,用{{$lat}}插入到JSON请求体时,它会自动给变量值套上引号,导致后端服务把它当成字符串拒绝。而内置的$timestamp之所以正常,是因为它是Postman原生的动态变量,返回的就是纯数字,所以不会加引号。
这里有几个实用的解决办法:
方法一:在请求体里直接用表达式转成数字
Postman允许在双大括号的变量语法里写简单的JavaScript表达式,你可以直接把变量转成浮点数,这样生成的JSON里lat就是纯数字:
{ "unixTimeStamp": {{$timestamp}}, "lng": 145.123, "lat": {{parseFloat(pm.environment.get('lat'))}} }
这样Postman会自动执行这个表达式,把环境变量里的lat字符串转成数字,发送的请求体里lat就不会带引号了。
方法二:预请求脚本直接替换请求体占位符
如果不想在请求体里写表达式,你可以先在请求体里放个占位符,再用预请求脚本替换成计算后的数值:
- 先把请求体改成这样:
{ "unixTimeStamp": {{$timestamp}}, "lng": 145.123, "lat": "__LAT_PLACEHOLDER__" }
- 然后修改预请求脚本:
// 读取并计算lat值 var lat = parseFloat(pm.environment.get('lat')) + 0.001; lat = lat.toPrecision(5); pm.environment.set('lat', lat); // 替换请求体里的占位符 var rawBody = pm.request.body.raw; var updatedBody = rawBody.replace('__LAT_PLACEHOLDER__', lat); pm.request.body.update({raw: updatedBody});
这样发送请求时,占位符会被替换成纯数字,JSON里的lat就是数值类型。
验证方法
改完之后,可以点击Postman的「Preview」标签,看生成的请求体里lat字段是不是不带引号的数字,确认没问题再发送请求。
内容的提问来源于stack exchange,提问作者intotecho
相关产品推荐
相关产品推荐

