To verify json response contains expected value

Hello all,
my apologies if this topic was already discussed (could not find such).

The question is the following:
every time I get a response, I have a kind of data – the list of the franchises with the genres list “inside” every franchise:

franchises
0

![](http://jsonviewer.stack.hu/extjs/images/default/s.gif)![](http://jsonviewer.stack.hu/array.gif)[genres](http://jsonviewer.stack.hu/#)

1
2
n

I need to iterate each franchise and verify that genres list contains ‘comedy’ value because this genres list can be different for each franchise.

I started with:

def responseDataGenres = WS.sendRequest(findTestObject(‘Object Repository/APIs/_(api)_genres’))

if (WS.verifyResponseStatusCode(responseDataGenres, 200)) {

JsonSlurper parser = new JsonSlurper()

def parsedResp = parser.parseText(responseDataGenres)

WS.verifyElementPropertyValue(responseDataGenres, “franchises[i].genres”, “comedy”)
This is not a solution (as I can see) because ‘comedy’ is not a single value

Thanks in advance :slight_smile:

Hello,
try following:

import groovy.json.JsonSlurperdef jsonText = '{"franchises":[{"genres":[{"0":"comedy"},{"1":"sitcom"},{"2":"family issues"}]}]}' def response = new JsonSlurper().parseText(jsonText)
assert response.franchises[0].genres*.find { 'comedy' in it.value }.key.size() == 1
assert response.franchises[0].genres*.find { 'tragedy' in it.value }.key.size() == 1

console:

08-13-2018 03:49:20 PM - [START]  - Start Test Case : Test Cases/__Sandbox/New Test Case 7
08-13-2018 03:49:20 PM - [INFO]   - Evaluating variables for test case
08-13-2018 03:49:20 PM - [START]  - Start action : Statement - jsonText = "{"franchises":[{"genres":[{"0":"comedy"},{"1":"sitcom"},{"2":"family issues"}]}]}"
08-13-2018 03:49:20 PM - [END]    - End action : Statement - jsonText = "{"franchises":[{"genres":[{"0":"comedy"},{"1":"sitcom"},{"2":"family issues"}]}]}"
08-13-2018 03:49:20 PM - [START]  - Start action : Statement - response = new groovy.json.JsonSlurper().parseText(jsonText)
08-13-2018 03:49:20 PM - [END]    - End action : Statement - response = new groovy.json.JsonSlurper().parseText(jsonText)
08-13-2018 03:49:20 PM - [START]  - Start action : Statement - assert key.size() == 1
08-13-2018 03:49:20 PM - [END]    - End action : Statement - assert key.size() == 1
08-13-2018 03:49:20 PM - [START]  - Start action : Statement - assert key.size() == 1
08-13-2018 03:49:20 PM - [END]    - End action : Statement - assert key.size() == 1
08-13-2018 03:49:20 PM - [FAILED] - Test Cases/__Sandbox/New Test Case 7 FAILED because (of) org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert response.franchises[0].genres*.find { 'tragedy' in it.value }.key.size() == 1       |        |         |   |       |                              |   |      |       |        |         |   |       [null, null, null]             []  0      false       |        |         |   [[0:comedy], [1:sitcom], [2:family issues]]       |        |         [genres:[[0:comedy], [1:sitcom], [2:family issues]]]       |        [[genres:[[0:comedy], [1:sitcom], [2:family issues]]]]       [franchises:[[genres:[[0:comedy], [1:sitcom], [2:family issues]]]]]
08-13-2018 03:49:20 PM - [END]    - End Test Case : Test Cases/__Sandbox/New Test Case 7

Hello Andrej,

thank you for your quick response.

I added to the script your solution, but used not exact jsonText as you mentioned, because my Json is different during every GET call I do. So, I got the same failed case for ‘comedy’ which you got for ‘tragedy’ verification

import groovy.json.JsonSlurperdef responseDataGenres = WS.sendRequest(findTestObject('Object Repository/APIs/_(api)_genres'))responseText = responseDataGenres.getResponseText()def parsed = new JsonSlurper().parseText(responseText)assert parsed.franchises[0].genres*.find { 'comedy' in it.value }.key.size() == 1

Am I wrong with json parsing?

Thanks

Lina,
could you please post how your response Json looks like?
btw. is it possible that 1st object does not have ‘comedy’ value in it?

Andrej,

regarding this issue “is it possible that 1st object does not have ‘comedy’ value in it?” - No, ‘comedy’ value is always in it, because I applied this filter and verify that every franchise contains this value

Json is attached.

Thank you.

it was not working becouse there was difference in genres. in response it’s plain array so it should look like this:

import groovy.json.JsonSlurper
def jsonText = '{"franchises":[{"genres":["comedy","sitcom","family issues"]}]}' 
def response = new JsonSlurper().parseText(jsonText)
println response.franchises[0].genres.find { genre -> genre == 'comedy'}
assert response.franchises[0].genres.find { genre -> genre == 'comedy'} != null
assert response.franchises[0].genres.find { genre -> genre == 'tragedy'} != null

console:

08-14-2018 09:05:11 AM - [START]  - Start Test Case : Test Cases/__Sandbox/New Test Case 7
08-14-2018 09:05:11 AM - [INFO]   - Evaluating variables for test case
08-14-2018 09:05:12 AM - [START]  - Start action : Statement - jsonText = "{"franchises":[{"genres":["comedy","sitcom","family issues"]}]}"
08-14-2018 09:05:12 AM - [END]    - End action : Statement - jsonText = "{"franchises":[{"genres":["comedy","sitcom","family issues"]}]}"
08-14-2018 09:05:12 AM - [START]  - Start action : Statement - response = new groovy.json.JsonSlurper().parseText(jsonText)
08-14-2018 09:05:12 AM - [END]    - End action : Statement - response = new groovy.json.JsonSlurper().parseText(jsonText)
08-14-2018 09:05:12 AM - [START]  - Start action : Statement - println(genres.find({ java.lang.Object genre -> ... }))comedy
08-14-2018 09:05:12 AM - [END]    - End action : Statement - println(genres.find({ java.lang.Object genre -> ... }))
08-14-2018 09:05:12 AM - [START]  - Start action : Statement - assert genres.find({ java.lang.Object genre -> ... }) != null
08-14-2018 09:05:12 AM - [END]    - End action : Statement - assert genres.find({ java.lang.Object genre -> ... }) != null
08-14-2018 09:05:12 AM - [START]  - Start action : Statement - assert genres.find({ java.lang.Object genre -> ... }) != null
08-14-2018 09:05:12 AM - [END]    - End action : Statement - assert genres.find({ java.lang.Object genre -> ... }) != null
08-14-2018 09:05:12 AM - [END]    - End Test Case : Test Cases/__Sandbox/New Test Case 7
08-14-2018 09:05:12 AM - [FAILED] - Test Cases/__Sandbox/New Test Case 7 FAILED because (of) org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert response.franchises[0].genres.find { genre -> genre == 'tragedy'} != null       |        |         |   |      |                                   |       |        |         |   |      null                                false       |        |         |   [comedy, sitcom, family issues]       |        |         [genres:[comedy, sitcom, family issues]]       |        [[genres:[comedy, sitcom, family issues]]]       [franchises:[[genres:[comedy, sitcom, family issues]]]]

Andrej, thank you very much. It works.

Hi,
Please follow below tutorial

Hi,
Please follow below tutorial