Reputation: 357
As part of verification in Robot Framework, I have following data (stored as ${response}
) as get request response:
{
"interfaces": [
{
"name": "eth0",
"status": "ready",
"macAddress": "xx:xx:xx:xx:xx:xx",
"ipv4": {
"mode": "DHCP",
"address": "127.0.0.1",
"mask": "255.255.255.0",
},
"ipv6": {
"mode": "DISABLED",
"addresses": [],
"gateway": "",
}
}
],
"result": 0
}
And I would like to get value of key ipv4
and compare it with predefined value. I tried to use it out of HttpLibrary.HTTP
as this will be deprecated for Robot Framework 3.1 so I would like to use Evaluate
.
Will it be possible within Robot Framework?
Upvotes: 4
Views: 26098
Reputation: 1
In my case I just put this way and works:
${response.json()['data'][1]['b1_YDESCRI']}
Upvotes: 0
Reputation: 20067
If the variable ${response}
is a response object - vs just a string, the content of the payload - the most straightforward way is to call its json()
method, which returns the payload as parsed dictionary:
${the data}= Evaluate ${response.json()}
Another way is to parse the payload with json.loads()
yourself, passing the .content
attribute that stores it (this is pretty much what the .json()
does internally):
${the data}= Evaluate json.loads(${response.content}) json
And if that variable ${response}
is a string, the actual payload, then just pass it to json.loads()
:
${the data}= Evaluate json.loads($response) json
Now that you have the data as a regular dictionary, do your verifications the normal way:
Should Be Equal ${the data['interfaces'][0]['ipv4']} ${your predefined dictionary}
Upvotes: 8
Reputation: 57
I don't know Robot Framework but if you want to manipulate JSON, you can use the built-in lib json.
import json
data = json.loads(response)
ipv4 = data['interfaces'][0]['ipv4']
Upvotes: -2
Reputation: 28595
Is this all you're needing?
jsonObj = {
"interfaces": [
{
"name": "eth0",
"status": "ready",
"macAddress": "xx:xx:xx:xx:xx:xx",
"ipv4": {
"mode": "DHCP",
"address": "127.0.0.1",
"mask": "255.255.255.0",
},
"ipv6": {
"mode": "DISABLED",
"addresses": [],
"gateway": "",
}
}
],
"result": 0
}
ipv6 = jsonObj['interfaces'][0]['ipv6']
print (ipv6)
Output:
{'mode': 'DISABLED', 'addresses': [], 'gateway': ''}
Upvotes: 0