Как извлечь параметр JSON с помощью JsonSlurper в Groovy
Я написал следующий скриптовый скрипт в SOAPUI, чтобы выполнить утверждение в ответе JSON.
У меня возникают трудности при написании утверждения для извлечения и утверждения в свойстве Weather > main > Clouds и значении ответа JSON.
Может кто-нибудь помочь с исправлением моего кода, чтобы извлечь значение, которое я хочу?
Спасибо!
import groovy.json.JsonSlurper
def json = '''{
"coord": {
"lon": -0.13,
"lat": 51.51
},
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}
],
"base": "stations",
"main": {
"temp": 281.644,
"pressure": 1027.43,
"humidity": 100,
"temp_min": 281.644,
"temp_max": 281.644,
"sea_level": 1035.14,
"grnd_level": 1027.43
},
"wind": {
"speed": 3.33,
"deg": 43.5005
},
"clouds": {
"all": 12
},
"dt": 1476231232,
"sys": {
"message": 0.0084,
"country": "GB",
"sunrise": 1476253200,
"sunset": 1476292372
},
"id": 2643743,
"name": "London",
"cod": 200
}'''
def result = new JsonSlurper().parseText(json)
log.info(result)
assert result.weather.main == "Clouds"
3 ответа
Погода это массив карт, как я вижу. Итак, вам нужно выбрать элемент или Groovy вернет вам массив main.
assert result.weather.first().main == "Clouds"
assert result.weather.main == ["Clouds"]
Погода в вашем JSON является массивом. Вы можете получить доступ к элементам как обычный массив
assert result.weather.main[0] == "Clouds"
assert result?.weather?.main?.getAt(0) == "Clouds"
второй предпочтительнее, потому что это нуль-сейф
Похоже, это тривиальная проблема.
weather
является массивом (в []), и поэтому утверждение не выполняется.
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}
],
Если вы делаете result.weather.main
затем возвращает список, содержащий элемент Clouds
, Но ни одно значение, как вы ожидали.
Итак, вы можете сделать:
assert result.weather[0].main == 'Clouds', 'Not matching the expected result'
или жеassert result.weather.main == ['Clouds']
или жеassert result.weather.main.contains('Clouds')
Предположим, что погода ниже (пример с большим количеством элементов в массиве json):
"weather": [
{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
},
{
"id": 802,
"main": "CloudApps",
"description": "few clouds",
"icon": "03n"
}
],
Тогда утверждение может быть сделаноassert result.weather.main == ['Clouds', 'CloudApps']