SoapUI JSON 解析 - 使用子值获取父节点

SoapUI JSON Parsing - Get Parent Node using Child value

我收到来自 SoapUI 的 JSON 响应,如下所示。

    {
    "-1":    {
      "startDate": "",
      "modifiedBy": "",
      "endDate": "",
      "projectId": 1,
      "build": "",
      "projectKey": "TEST",
      "started": ""
    },
    "0":    {
      "startDate": "",
      "modifiedBy": "",
      "endDate": "",
      "projectId": 2,
      "build": "",
      "projectKey": "BEST",
      "started": ""
    },
    "2":    {
      "startDate": "",
      "modifiedBy": "",
      "endDate": "",
      "projectId": 3,
      "build": "",
      "projectKey": "WORST",
      "started": ""
    }
    }

我的要求是,我必须使用 JsonSurpler 或 Groovy 脚本测试步骤获得具有 projectkey="BEST" 的 value/node“0”。 projectkey 现在位于节点“0”下。也许它会低于“10”或“1000”或“-500”。

如何使用子节点值获取父节点?

有多种方法可以实现这一点。这些是我现在能记住的最简单的:

import groovy.json.JsonSlurper

String string = '''{
    "-1": {
      "startDate": "",
      "modifiedBy": "",
      "endDate": "",
      "projectId": 1,
      "build": "",
      "projectKey": "TEST",
      "started": ""
    },
    "0":{
      "startDate": "",
      "modifiedBy": "",
      "endDate": "",
      "projectId": 2,
      "build": "",
      "projectKey": "BEST",
      "started": ""
    },
    "2": {
      "startDate": "",
      "modifiedBy": "",
      "endDate": "",
      "projectId": 3,
      "build": "",
      "projectKey": "WORST",
      "started": ""
    }
}'''

def json = new JsonSlurper().parseText(string)

assert json.find { it.value?.projectKey == 'BEST' }?.key == '0'
assert json.findResult { k, v -> v?.projectKey == 'BEST' ? k : null } == '0'

这将找到第一个满足条件的项目。如果您需要所有满足条件的项目,则相应地使用 findAllfindResults