PHP解析REST API返回JSON并校验allTests字段中测试状态的方法
错误原因
- 原有代码错误遍历了JSON根节点的所有属性,根节点下的
id、name等属性都是字符串类型,尝试用数组下标访问字符串就会触发你遇到的类型错误。 - 硬编码下标
[7]查找测试结果的写法不通用,测试数据可能出现在任意一个请求的allTests数组中。
修复后可直接运行的代码
<?php // 读取JSON文件 $json = file_get_contents('Testing.postman_test_run.json'); if ($json === false) { die('JSON文件读取失败'); } // 解码JSON,第二个参数true返回数组格式 $json_data = json_decode($json, true); // 校验解码结果 if (json_last_error() !== JSON_ERROR_NONE) { die('JSON格式解析错误: ' . json_last_error_msg()); } // 预定义需要检查的测试结果键 $targetTestKeys = [ 'TestOnBlazemeterWasBroken', 'TestOnBlazemeterFailed', 'TestOnBlazemeterWasSuccessful' ]; // 直接遍历根节点下的results数组,所有请求结果都存在这里 foreach ($json_data['results'] as $requestItem) { // 跳过没有allTests字段的请求 if (!isset($requestItem['allTests']) || !is_array($requestItem['allTests'])) { continue; } // 遍历当前请求的allTests数组 foreach ($requestItem['allTests'] as $testItem) { // 检查每个目标测试键 foreach ($targetTestKeys as $testKey) { // 键存在且值为true时触发操作 if (isset($testItem[$testKey]) && $testItem[$testKey] === true) { echo "找到符合条件的测试结果:{$testKey}" . PHP_EOL; echo "所属请求名称:{$requestItem['name']}" . PHP_EOL; echo "所属请求ID:{$requestItem['id']}" . PHP_EOL; // 如果需要打印完整请求信息可以打开下面的注释 // print_r($requestItem); echo PHP_EOL; } } } } ?>
代码说明
- 新增了文件读取、JSON解析的校验逻辑,避免无效输入导致的后续错误
- 直接遍历存储所有请求结果的
results节点,不会访问到根节点下的字符串类型属性 - 预定义目标测试键数组,后续需要新增或修改检查规则时只需要修改这个数组即可
- 逐层判断字段是否存在、类型是否正确,不会出现下标不存在的警告或类型错误
内容的提问来源于stack exchange,提问作者Edijs Bergs
相关产品推荐
相关产品推荐

