gpt4 book ai didi

java - 有没有办法根据另一个元素值查找 JSON 响应元素值?

转载 作者:行者123 更新时间:2023-12-02 03:41:39 25 4
gpt4 key购买 nike

使用下面的方法我可以获得“id”元素(第一个列表中的第一个元素)值。我需要获取该元素值,但基于另一个元素“gifts.nameEn”的条件

Response response = request.post("/pop/transaction/inquiry");
JsonPath jsonPathEvaluator = response.jsonPath();

List<HashMap> activeCampaignsList = jsonPathEvaluator.getList("");
for(int i=0; i< activeCampaignsList.size(); i++)
{
offerId = activeCampaignsList.get(i).get("id").toString();
break;
}

这是响应片段,以便您了解我到底在寻找什么:

[ { "**id**": 1222, "type": "WITHIN_TRANSACTION", "gifts": [ { "startDate": "2019-06-26", "endDate": "2019-06-26", "id": 26130, "nameAr": "abcd201957261140057", "nameEn": "*abcd201957261140057*",

最佳答案

RestAssured允许您使用JsonPath它在 JSON 处理中具有很强的实用性。您可以将 JSON 转换为 Java 对象,而不是使用路径,我将向您展示具体的操作方法。

因此,您的 JSON 以元素数组开头。每个元素都是 JSON 对象。每个 JSON 对象都包含嵌套的 JSON 数组 gifts其中包含 JSON 对象。让我进一步解释一下。

我们必须首先处理数组,即 JSON 的开头 [ 。为此,我们可以创建一个表示此数组的类,如下所示:

public class ElementObject { //this name is irrelevant. You can call it whatever you want
public String id; //the names of the variables are relevant
public String type; //each of variable name corresponds to the type and name in the JSON
public List<GiftObject> gifts; //here we handle the nested JSON Array of JSON Objects
}

现在,我们需要一个对象来处理 gifts 。这将需要另一个类:

public class GiftObject { //irrelevant name
public String startDate; //relevant name
public String endDate;
public String id;
public String nameAr;
public String nameEn;
}

现在,我们所要做的就是从 JsonPath 调用 1 个方法将整个 JSON 解析为 Java 类。像这样:

response.jsonPath().getObject("", ElementObject[].class);

基本上就是这样。从顶部开始:

[  
{
"id":1222,
"type":"WITHIN_TRANSACTION",

我们有一个包含 JSON 对象的 JSON 数组。 1 个 JSON 对象等于 ElementObject 的 1 个实例类(class)。数组中的所有对象都将被解析为 ElementObject[].class并且 JsonPath 将使用 Java Reflection 创建一个实例(您不必担心这一点)。

"gifts": [ { "startDate": "2019-06-26", "endDate": "2019-06-26", "id": 26130, "nameAr": "abcd201957261140057", "nameEn": "abcd201957261140057",

每件礼物都将被解析为 GiftObject 的新实例并存储在 List<GiftObject>ElementObject类。

我们现在要做的就是处理我们的 Java 类。

要完全回答您的问题 - 您需要基于 gifts.nameEn 的 ID 值

for (ElementObject element : elements) {
for (GiftObject gift : element.gifts) {
if (gift.nameEn.equals("abcd201957261140057")) {
System.out.println(element.id);
}
}
}

以上for循环可以轻松地替换为方法或 Java Streams。最适合您的。

鉴于上述代码,结果将是:

1222

希望对你有帮助!

编辑:如果您收到这样的异常,因为在类路径中找不到 JSON 反序列化器,因此无法反序列化对象。请将 Jackson (Databind) 或 Gson 放入类路径中。您所要做的就是将 jackson-databind 添加到 Maven。 Rest Assured 能够使用 Gson 或 Jackson databind 将 JSON 转换为 Java 类。您所需要的只是依赖项,一切都已准备就绪。

        <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>

关于java - 有没有办法根据另一个元素值查找 JSON 响应元素值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56832926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com