在空手道中,如何找到长度 os json 的对象(地图)?

In karate, how do i find the length os json objject (map)?

我有这样的回复:

{
  "Team:14051898": null,
  "59a0a29fe4b04de817c2a635": {
    "eid": "abc123",
    "name": "Chris"
  },
  "57dc07aae4b00768fe90cbf7": null,
  "Team:15199": {
    "eid": "abc123",
    "name": "Christin"
  },
  "59c53c15e4b066f69a1180d4": {
    "eid": "abc123",
    "name": "Michae"
  },
  "589cace8e4b0b32006e03299": {
    "eid": "abc123",
    "name": "Jay"
  },
  "59e0e2eae4b0c0e023297a2f": null
}

我需要找到其中的长度(团队数量)。我尝试使用:

* string expression = 'Object.keys(response).length'
* def result = karate.eval(expression)
* print result

还有 $.length 和其他几个选项。请帮我解决这个问题。

例如使用 karate.forEach() 有很多方法,但这是最简单的:

* def json = { a: 1, b: 2, c: 3 }
* def map = karate.toBean(json, 'java.util.HashMap')
* def count = map.size()
* match count == 3

编辑 - 现在有一个适用于数组和对象的 karate.sizeOf() API

另一种使用 javascript 的方法是:

Scenario: MyTest
  * def countKeys = function (obj) {return Object.keys(obj).length;}
  * def response =
    """ {
      "Team:14051898": null,
      "59a0a29fe4b04de817c2a635": {"eid": "abc123","name": "Chris"},
      "57dc07aae4b00768fe90cbf7": null,
      "Team:15199": {"eid": "abc123", "name": "Christin"},
      "59e0e2eae4b0c0e023297a2f": null
    }"""
  * match 5 == countKeys(response)