You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从嵌套JSON文件中按Status提取测试用例名称?

从嵌套JSON中按Status提取测试用例名称(Java Gson实现)

问题背景

给定如下嵌套结构的JSON测试结果文件:

{
   "TagName1":{
      "TestCaseName1":{
         "Status":"pass",
         "RunTime":"063045"
      },
      "TestCaseName2":{
         "Status":"fail",
         "RunTime":"064045"
      }
   },
   "TagName2":{
      "TestCaseName3":{
         "Status":"pass",
         "RunTime":"073045"
      },
      "TestCaseName4":{
         "Status":"fail",
         "RunTime":"074045"
      }
   }
}

需要根据Status字段值,提取对应的测试用例名称。


解决方案1:基于嵌套HashMap的遍历

你已经用Gson将JSON解析为嵌套HashMap,接下来只需通过多层遍历,提取每个测试用例的Status并匹配目标值,收集对应的测试用例名称即可。注意修正代码中的笔误(newBufferReader改为newBufferedReader),并通过TypeToken明确泛型类型避免警告:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestResultParser {
    public static void main(String[] args) {
        String filePath = "你的JSON文件路径";
        try {
            Gson gson = new Gson();
            Reader reader = Files.newBufferedReader(Paths.get(filePath));
            // 用TypeToken指定嵌套HashMap的泛型类型
            HashMap<String, HashMap<String, HashMap<String, String>>> parsedJson = gson.fromJson(
                reader,
                new TypeToken<HashMap<String, HashMap<String, HashMap<String, String>>>>() {}.getType()
            );

            // 定义要筛选的目标Status
            String targetStatus = "fail";
            List<String> targetTestCases = new ArrayList<>();

            // 遍历外层标签
            for (Map.Entry<String, HashMap<String, HashMap<String, String>>> tagEntry : parsedJson.entrySet()) {
                HashMap<String, HashMap<String, String>> testCases = tagEntry.getValue();
                // 遍历标签下的所有测试用例
                for (Map.Entry<String, HashMap<String, String>> testCaseEntry : testCases.entrySet()) {
                    String testCaseName = testCaseEntry.getKey();
                    String status = testCaseEntry.getValue().get("Status");
                    // 匹配目标Status则收集名称
                    if (targetStatus.equals(status)) {
                        targetTestCases.add(testCaseName);
                    }
                }
            }

            // 输出结果
            System.out.println("状态为[" + targetStatus + "]的测试用例:");
            targetTestCases.forEach(System.out::println);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

解决方案2:基于POJO的类型安全解析

嵌套HashMap可读性差且容易出现类型错误,推荐定义对应JSON结构的POJO类,实现类型安全的解析,代码更易维护:

步骤1:定义POJO类

// 测试用例详情类,对应JSON中的测试用例节点
class TestCaseDetail {
    private String Status;
    private String RunTime;

    // Getter方法
    public String getStatus() {
        return Status;
    }

    public String getRunTime() {
        return RunTime;
    }
}

步骤2:解析并筛选测试用例

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class TestResultParser {
    public static void main(String[] args) {
        String filePath = "你的JSON文件路径";
        try {
            Gson gson = new Gson();
            Reader reader = Files.newBufferedReader(Paths.get(filePath));
            // 解析为Map<String, Map<String, TestCaseDetail>>,外层key是TagName,内层key是TestCaseName
            Map<String, Map<String, TestCaseDetail>> testResultMap = gson.fromJson(
                reader,
                new TypeToken<Map<String, Map<String, TestCaseDetail>>>() {}.getType()
            );

            String targetStatus = "pass";
            List<String> targetTestCases = new ArrayList<>();

            for (Map.Entry<String, Map<String, TestCaseDetail>> tagEntry : testResultMap.entrySet()) {
                Map<String, TestCaseDetail> testCases = tagEntry.getValue();
                for (Map.Entry<String, TestCaseDetail> testCaseEntry : testCases.entrySet()) {
                    String testCaseName = testCaseEntry.getKey();
                    TestCaseDetail detail = testCaseEntry.getValue();
                    if (targetStatus.equals(detail.getStatus())) {
                        targetTestCases.add(testCaseName);
                    }
                }
            }

            System.out.println("状态为[" + targetStatus + "]的测试用例:");
            targetTestCases.forEach(System.out::println);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

内容的提问来源于stack exchange,提问作者Akshay Katiha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:52:51