【问题标题】:Karate - filter a specific json key from response based on another static array空手道 - 根据另一个静态数组从响应中过滤特定的 json 键
【发布时间】:2021-06-07 08:59:58
【问题描述】:

我有以下 JSON 响应(参考名称:“list”)和

  [
  {
    "key": "101",
    "val": {
      "portCall": {
        "id": 12664978
      },
      "status": "in-port"
    }
  },
  {
    "key": "102",
    "val": {
      "portCall": {
        "id": 12415798
      },
      "status": "in-port"
    }
  },
  {
    "key": "103",
    "val": {
      "status": "on-voyage",
      "voyage": {
        "id": "7kynv-7lq85"
      }
    }
  },
  {
    "key": "104",
    "val": {
      "status": "on-voyage",
      "voyage": {
        "id": "7kynv-2385"
      }
    }
  }
]

另外,我有一个包含几个键值的数组列表,evImos = [101,102,104]

其中,我必须在“列表”响应中识别出状态为“航行中”的第一个key。所以,结果应该是“104”。

我已经尝试了以下方法,我需要一些帮助才能使其正常工作。任何帮助将不胜感激。

  * def function getFirst = function(evImos) { for (let num of evImos) { let results = list.filter(d => d["key"] === num && d["val"]["status"] === "on-voyage"); if(results.length === 1) { karate.log(num); return num; } } }
  * list.forEach(getFirst(evImos))

【问题讨论】:

    标签: karate


    【解决方案1】:

    我只给你一个提示。这一行将把整个事情转换成一种更容易验证的形式:

    * def temp = {}
    * list.forEach(x => temp[x.key] = x.val.status)
    

    这给了你:

    {
      "101": "in-port",
      "102": "in-port",
      "103": "on-voyage",
      "104": "on-voyage"
    }
    

    现在你可以这样做了:

    * def isOnVoyage = function(key){ return temp[key] == 'on-voyage' }
    

    另请阅读:https://stackoverflow.com/a/59162760/143475

    【讨论】:

    • 在上述情况下,它将返回 103 而不是 104。它似乎没有数组列表“evImos”。原因是,我只希望从我的列表中验证键,而不是针对“列表”中的所有键。这可能吗?
    • 谢谢@Peter。
    【解决方案2】:

    谢谢@Peter。

    根据他的提示,我只是稍微调整了一下以符合我的要求,它对我有用。

    这是供任何人将来参考的工作副本。

      * def temp = {}
      * list.forEach(x => temp[x.key] = x.val.status)
      * def isOnVoyage = function(keys){ for (let key of keys) { if(temp[key] == 'on-voyage'){ karate.log(key); karate.set('num', key); break; }}}
      * isOnVoyage(evImos)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多