API测试:如何在动态JSON中获取首个subject为Open this message的id
问题描述
我正在做API测试,拿到的JSON响应是动态变化的(结构固定,但值和对象顺序会改变)。需要实现逻辑:找到首个subject字段值为Open this message的JSON对象,并获取它对应的id值(比如示例中的3328367679)。
示例JSON响应(顺序可变):
[ { "id": 3394784853, "inbox_id": 35584, "subject": "Another message" }, { "id": 3328367679, "inbox_id": 35584, "subject": "Open this message" }, { "id": 3328364404, "inbox_id": 35584, "subject": "Another message" } ]
解决方案
方案1:Python实现
直接遍历列表,找到第一个匹配项就停止,避免无效遍历:
import json # 替换为实际接口返回的JSON字符串 api_response = '''[ {"id": 3394784853,"inbox_id": 35584,"subject": "Another message"}, {"id": 3328367679,"inbox_id": 35584,"subject": "Open this message"}, {"id": 3328364404,"inbox_id": 35584,"subject": "Another message"} ]''' # 解析JSON为Python列表 message_list = json.loads(api_response) target_id = None for msg in message_list: if msg.get('subject') == 'Open this message': target_id = msg.get('id') break # 找到首个匹配项后立即停止 print(target_id) # 输出:3328367679
方案2:JavaScript/Node.js实现
利用数组find方法快速定位首个匹配对象:
// 替换为实际接口返回的JSON数组 const response = [ {"id": 3394784853,"inbox_id": 35584,"subject": "Another message"}, {"id": 3328367679,"inbox_id": 35584,"subject": "Open this message"}, {"id": 3328364404,"inbox_id": 35584,"subject": "Another message"} ]; const targetMsg = response.find(msg => msg.subject === 'Open this message'); const targetId = targetMsg ? targetMsg.id : null; console.log(targetId); // 输出:3328367679
方案3:Postman测试脚本实现
适合API测试场景,可将结果存为环境变量供后续请求使用:
// 解析接口响应JSON const responseJson = pm.response.json(); let targetId = null; for (let i = 0; i < responseJson.length; i++) { if (responseJson[i].subject === 'Open this message') { targetId = responseJson[i].id; break; } } // 存储到环境变量(可选) pm.environment.set("target_message_id", targetId); console.log("目标ID:", targetId);
核心逻辑说明
所有方案的核心思路一致:
- 解析JSON数组
- 按顺序遍历数组中的每个对象
- 检查对象的
subject字段是否匹配目标值 - 找到首个匹配对象后,立即取出
id并终止遍历(提升效率)
内容的提问来源于stack exchange,提问作者Faith Berroya
相关产品推荐
相关产品推荐

