json - 使用 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 但测试用例通过了。
如果找不到密钥,我希望它应该破坏测试用例。
解决方案
<编辑 - 只需重新阅读您的问题,相应调整答案>
首先,我将调用您解析的 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
}
推荐阅读
- c# - 尝试查找类是否在帧之间发生更改的问题
- android - Android 数据绑定问题:无法反转表达式 XXX
- python - 如何开发代码以使用 pandas 自动按日期抓取数据
- vb.net - 多 IP ping
- java - Nagios 可以使用任何自定义 API 吗?
- android - RxJava - 在“订阅” lambda 中使用不同类型的变量(多链运算符的结果)
- git - 如何构建最适合 Git 的文件夹?
- visual-studio - Visual Studio 2017 升级后的 cl 不是完整路径,在 PATH 中找不到
- javascript - 如何制作机器人Whent,机器人
- ios - 使用 Realm 为新属性赋值时崩溃