如何通过比较 JSON 中的 2 个字段来打印值 - RestAssured

问题描述 投票:0回答:1

考虑以下数据集:

[
    {
        "_id": 1234,
        "bagnumber": "A",
        "bagtype": "coin"
    },
    {
        "_id": 2345,
        "bagnumber": "B",
        "bagtype": "cash"
    },
    {
        "_id": 3456,
        "bagnumber": "C",
        "bagtype": "coin"
    },
    {
        "_id": 5678,
        "bagnumber": "D",
        "bagtype": "cash"
    }
]

我需要提取并打印仅包含袋子类型“现金”的袋子号码。因此,所需的输出应该是:

Bag numbers are: B, D

我尝试首先使用列表提取行李号:

List<String> bagNumbers = response.jsonPath().getList("bagnumber");

随后,我尝试使用相同的列表检索行李类型,并尝试比较两个列表。然而,我的尝试没有成功,可能表明方法过于复杂。

有人可以建议一个更有效的解决方案吗?也许利用 Matchers 类或任何其他合适的方法将受到赞赏。

java json eclipse rest-assured rest-assured-jsonpath
1个回答
0
投票

GSON

我建议使用 Gson 或 Jackson 进行 Json 处理。

如果输入是字符串,则使用以下方法将其转换为 JsonArray:

JsonArray jsonData = new Gson().fromJson(jsonString, JsonArray.class);

创建一个包含结果的列表:

List<String> listBadCashNumber =new ArrayList<>();

开始迭代数组:

for(int i = 0;i<jsonData.size();i++){
    JsonObject bag = jsonData.get(i).getAsJsonObject();// Because each element off array is a object
    if(bag.get("bagtype").getAsString().equals("cash")){ // Compare the field 'bagtype', you should handle the null if needed
        listBadCashNumber.add(bag.get("bagnumber").getAsString()); // Add to result list
    }
}
System.out.println("Bag numbers are: "+listBadCashNumber);

结果是:

Bag numbers are: [B, D]
© www.soinside.com 2019 - 2024. All rights reserved.