You need to enable JavaScript to run this app. PHP解析REST API返回JSON并校验allTests字段中测试状态的方法
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 03:00:01