遍历Postman JSON响应按条件存全局变量遇报错,求解决方案
问题解决:Postman测试脚本遍历数组时的TypeError错误
错误原因分析
- 循环边界越界:数组索引从0开始,当你用
i <= users_len时,循环会执行到i = users_len,此时res.data.users[i]是undefined,读取isRetail自然会抛出Cannot read properties of undefined错误。 - 布尔值与字符串错误比较:返回的JSON中
isRetail是布尔类型(true/false),但你用了和字符串"true"/"false"比较,这会导致判断逻辑完全失效(布尔值true和字符串"true"并不相等)。 - 变量未声明:
is_retail变量未用let/const声明,会隐式成为全局变量,不符合代码规范。
修正后的测试代码
简洁版(推荐使用for...of遍历)
const res = pm.response.json(); const users = res.data.users; for (const user of users) { const isRetail = user.isRetail; if (isRetail === true) { pm.globals.set("UserId", user.id); } else if (isRetail === false) { pm.globals.set("orgUserId", user.id); } }
保留原for循环写法的修正版
const res = pm.response.json(); const users_len = res.data.users.length; for (let i = 0; i < users_len; i++) { const user = res.data.users[i]; const is_retail = user.isRetail; if (is_retail === true) { pm.globals.set("UserId", user.id); } else if (is_retail === false) { pm.globals.set("orgUserId", user.id); } }
关键修改说明
- 将循环条件从
i <= users_len改为i < users_len,确保只访问数组存在的索引。 - 把字符串比较
"true"/"false"改为直接和布尔值true/false比较,保证判断逻辑正确。 - 用
const/let声明所有变量,避免隐式全局变量。 for...of循环无需手动处理索引,代码更简洁易读,降低出错概率。
内容的提问来源于stack exchange,提问作者Koushic
相关产品推荐
相关产品推荐

