Groovy: json 根据子值获取id的值

Groovy: json get value of id based on child value

我有一个 json 如下:

[
   {
      "id":6619137,
      "oid":"6fykq37gm60x",
      "key":{
         "key":"6619137"
      },
      "name":"Prod",
      "planKey":{
         "key":"PDP"
      },
      "environments":[
         {
            "id":6225923,
            "key":{
               "key":"6619137-6225923"
            },
            "name":"Production",
            "deploymentProjectId":6619137,
         }
      ],
   },
   {
      "id":6619138,
      "oid":"6fykq37gm60y",
      "key":{
         "key":"6619138"
      },
      "name":"QA",
      "planKey":{
         "key":"QDP"
      },
      "environments":[
         {
            "id":6225924,
            "key":{
               "key":"6619138-6225924"
            },
            "name":"QA",
            "deploymentProjectId":6619138,
         }
      ],
   },
]

我可以使用下面的代码根据名称值提取 id 和 environments.id 的值。 projectID 将给出 6619137,environmentID 将给出 6225923

def e = json.planKey.find{it.name=='Prod'}
def projectID = e.id
def environmentID = e.environments[0].id

但是,当我尝试根据 plankey.key 值(例如 PDP 或 QDP)提取 id 和 environments.id 的值时,使用与上面相同的格式 returns 我java.lang.NullPointerException: Cannot get property 'id' on null object at Script60.run(Script60.groovy:52)

的错误
def e = json.planKey.find{it.planKey=='{key=PDP}'}
def projectID = e.id
def environmentID = e.environments[0].id

有什么方法可以获取带有 plankey 键值的 projectID 吗?

将您的 JSON 对象视为具有多个级别的 key/value 地图。没有这样的项目

json.find{it.planKey=='{key=PDP}'}

但是,您可以找到任何级别的值,如下所示:

def e = json.find{it.planKey.key == "PDP"}

如果您的结构中 planKey 可能不存在,或者它并不总是 key,那会有点不同,但从您的问题来看,这里的情况似乎并非如此。

编辑:根据下面的评论更正语法。