首页 > 解决方案 > 使用 groovy 在 json 响应中断言键名

问题描述

我想在 json 响应中声明一个键。

回复

{
  "availableRooms": [
    {
      "roomId": 2,
      "exchangeEmailId": null,
      "roomName": "Room 1",
      "floor": 0,
      "groupID": 3,
      "defaultCapacity": 8,
      "maxCapacity": 8,
      "attributes": [
        {
          "attributeID": 170,
          "displayName": "Video Conference Unit",
          "abbreviation": "VCU"
        }
      ],
      "externalRoomEmail": "vinay.jaiswal@condecosoftware.com"
    }
  ],
  "availableRoomsForAllDates": {},
  "callResponse": {
    "message": null,
    "customResponseCode": null
  }
}

时髦的

import groovy.json.JsonSlurper
def ResponseMessage = messageExchange.response.responseContent
def jsonSlurper = new JsonSlurper().parseText(ResponseMessage)
if( jsonSlurper.containsKey( 'externalRoomEmail' ) ) 
{
    log.info 'a'
}
else
{
    log.info 'b'
}

输出

Tue Nov 24 20:24:35 IST 2020:INFO:b

有没有内置的方法?

如果我尝试 jsonSlurper.availableRooms.externalRoomEmail 那么它给我 null 但测试用例通过了。

如果找不到密钥,我希望它应该破坏测试用例。

标签: jsongroovysoapui

解决方案


<编辑 - 只需重新阅读您的问题,相应调整答案>

首先,我将调用您解析的 jsonjson而不是jsonSlurper因为 slurper 是用于解析 json 的 groovy 类,并且将数据命名为“slurper”在概念上令人困惑。

所以你的问题是json.availableRooms返回一个列表。换句话说,你将不得不使用类似的东西:

if(json.availableRooms.first().externalRoomEmail) { 
  ...
} else {
  ...
}

检查第一个房间是否有externalRoomEmail定义。

从那里取决于你想做什么。假设您想查看是否有任何可用房间已externalRoomEmail定义,然后您将执行以下操作:

def roomsWithEmails = json.availableRooms.findAll { it.externalRoomEmail }
if (roomsWithEmails) {
  roomsWithEmails.each { room ->
    println "room ${room.roomName} has external email ${room.externalRoomEmail}"
  }
} else { // no rooms with externalRoomEmail
  // do something else
} 

推荐阅读