2016-10-12 5 views
0

Ich habe das folgende groovy-Skript in SOAPUI geschrieben, um eine Assertion auf eine JSON-Antwort auszuführen.Wie man JSON-Parameter mit JsonSlurper in Groovy extrahiert

Ich habe Schwierigkeiten beim Schreiben der Behauptung zu extrahieren und auf Wetter> main> Wolken Eigenschaft und Wert der JSON-Antwort zu behaupten.

Kann jemand bitte helfen, meinen Code zu korrigieren, um den Wert zu extrahieren, den ich will?

Danke!

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" 

Antwort

0

Wetter ist eine Reihe von Karten, wie ich sehe. Also, Sie müssen ein Element auswählen oder Groovy wird Ihnen ein Array von Main zurückgeben.

assert result.weather.first().main == "Clouds" 
​assert result.weather.main == ["Clouds"​]​ 
0

Sieht aus, es ist ein triviales Problem.

weather ist ein Array (in []) und deshalb schlägt die Assertion fehl.

"weather": [ 
    { 
    "id": 801, 
    "main": "Clouds", 
    "description": "few clouds", 
    "icon": "02n" 
    } 
    ], 

Wenn Sie result.weather​.main​ tun, dann gibt es eine Liste, die Clouds ein Element enthält. Aber, kein einziger Wert wie erwartet.

So können Sie tun:

assert result.weather​[0].main == 'Clouds', 'Not matching the expected result' oder
assert result.weather​.main == ['Clouds'] oder
assert result.weather.main.contains('Clouds')

Denn angenommen, wenn das Wetter unten ist (Beispiel mit mehreren Elementen in Json-Array):

"weather": [ 
    { 
    "id": 801, 
    "main": "Clouds", 
    "description": "few clouds", 
    "icon": "02n" 
    }, 
    { 
    "id": 802, 
    "main": "CloudApps", 
    "description": "few clouds", 
    "icon": "03n" 
    } 
    ], 

Dann kann die Bestätigung erfolgen assert result.weather.main == ['Clouds', 'CloudApps']

0

wetter in ihrem json ist array. Sie können es Elemente Zugriff als reguläres Array

assert result.weather.main[0] == "Clouds" 
assert result?.weather?.main?.getAt(0) == "Clouds" 

an zweiter Stelle bevorzugte, weil es null sicher

Verwandte Themen