【问题标题】:how to loop over two json arrays and filter results in karate? [duplicate]如何循环两个json数组并过滤空手道结果? [复制]
【发布时间】:2020-10-19 17:25:40
【问题描述】:

我有 2 个 JSON 数组

a= [{"[{ "Id": "123","Types": "Dial"},{"Id": "963", "Types": "Post"},{"Id": "456","Types": "Dial"},
  { "Id": "569","Types": "Dial"}]
 b= [{"Subject": {"Prog": [{"Type": "Identifier","Id": "123"}]}},
    {"Subject": {"Prog": [{"Type": "Identifier" ,"Id": "569"}]}},
    {"Subject": {"Prog": [{"Type": null,"Id": "963"}]}},
    {"Subject": {"Prog": [{"Type": null,"Id": "963"}]}},
    {"Subject": {"Prog": [{"Type": null,"Id": "963"}]}},
    {"Subject": {"Prog": [{"Type": null,"Id": "963"}]}},
    {"Subject": {"Prog": [{"Type": "Identifier","Id": "456"}]}}]

我想从“a”验证“类型”值是否为“POST”,因为 JSON“b”中对应的“id”“类型”的值为“null”

请帮忙。

【问题讨论】:

    标签: arrays json automation karate


    【解决方案1】:

    您可以通过使用 Json-path 与空手道的集成来实现这一点,也可以使用过滤器功能。

    * def IdArray = karate.jsonPath(a,"$..[?(@.Types=="Post")].Id")  
    * def FilteredArray = call FilterFunction(IdArray,b)
    

    你可以定义过滤函数为

    * def FilterFunction =
    """
    function(arr,b)
    { var result = []
     for(i=0;i<arr.length;i++)
       { var Mypath = "$..[?(@.Id==\""+ arr[i] +"\")].Type"
         var newArr = karate.jsonPath(b,Mypath)
         karate.apend(result,newArr)
       }
     return result
    }
    """"
    

    这样,filteredArray 将包含所有空值。只需对该数组进行空值检查即可。

    【讨论】:

    • 感谢您的帮助。过滤器函数返回一个空数组。我遵循了与提到的相同的代码。也尝试过使用不同的 JSON 数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2020-10-13
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多