Karate — JSON Response Parsing












2















Below is the JSON response I receive when I am hitting a particular web service:



[
{
"sId" : "0001",
"sName" : "abc1",
"sPlace" : "abc11"
}, {
"sId" : "0002",
"sName" : "abc2",
"sPlace" : "abc12"
}, {
"sId" : "0003",
"sName" : "abc3",
"sPlace" : "abc13"
}, {
"sId" : "0004",
"sName" : "abc4",
"sPlace" : "abc14"
}
]


I don't know which index has my expected values (I need to validate multiple values after identifying which has sId == '0003'), this is dynamic. Don't want to user hard coded value.
And match response.[3].sId == '0003'
because this will be changed next time.



I have two questions regarding this:




  1. How can I pass response to java code and get the array index which having sId == '0003' so that I can use this index to validate?

  2. How can I pass a variable value as an array index in response?


The code below is not working.



def ind = Java.type('karate.Utility.FindIndex') 
response.['#ind'].sId == '0003'









share|improve this question

























  • Can you get what you want with JsonPath Filters? As far as I understand your question, you may not need the index itself.

    – Alex J
    Jan 2 at 21:51
















2















Below is the JSON response I receive when I am hitting a particular web service:



[
{
"sId" : "0001",
"sName" : "abc1",
"sPlace" : "abc11"
}, {
"sId" : "0002",
"sName" : "abc2",
"sPlace" : "abc12"
}, {
"sId" : "0003",
"sName" : "abc3",
"sPlace" : "abc13"
}, {
"sId" : "0004",
"sName" : "abc4",
"sPlace" : "abc14"
}
]


I don't know which index has my expected values (I need to validate multiple values after identifying which has sId == '0003'), this is dynamic. Don't want to user hard coded value.
And match response.[3].sId == '0003'
because this will be changed next time.



I have two questions regarding this:




  1. How can I pass response to java code and get the array index which having sId == '0003' so that I can use this index to validate?

  2. How can I pass a variable value as an array index in response?


The code below is not working.



def ind = Java.type('karate.Utility.FindIndex') 
response.['#ind'].sId == '0003'









share|improve this question

























  • Can you get what you want with JsonPath Filters? As far as I understand your question, you may not need the index itself.

    – Alex J
    Jan 2 at 21:51














2












2








2








Below is the JSON response I receive when I am hitting a particular web service:



[
{
"sId" : "0001",
"sName" : "abc1",
"sPlace" : "abc11"
}, {
"sId" : "0002",
"sName" : "abc2",
"sPlace" : "abc12"
}, {
"sId" : "0003",
"sName" : "abc3",
"sPlace" : "abc13"
}, {
"sId" : "0004",
"sName" : "abc4",
"sPlace" : "abc14"
}
]


I don't know which index has my expected values (I need to validate multiple values after identifying which has sId == '0003'), this is dynamic. Don't want to user hard coded value.
And match response.[3].sId == '0003'
because this will be changed next time.



I have two questions regarding this:




  1. How can I pass response to java code and get the array index which having sId == '0003' so that I can use this index to validate?

  2. How can I pass a variable value as an array index in response?


The code below is not working.



def ind = Java.type('karate.Utility.FindIndex') 
response.['#ind'].sId == '0003'









share|improve this question
















Below is the JSON response I receive when I am hitting a particular web service:



[
{
"sId" : "0001",
"sName" : "abc1",
"sPlace" : "abc11"
}, {
"sId" : "0002",
"sName" : "abc2",
"sPlace" : "abc12"
}, {
"sId" : "0003",
"sName" : "abc3",
"sPlace" : "abc13"
}, {
"sId" : "0004",
"sName" : "abc4",
"sPlace" : "abc14"
}
]


I don't know which index has my expected values (I need to validate multiple values after identifying which has sId == '0003'), this is dynamic. Don't want to user hard coded value.
And match response.[3].sId == '0003'
because this will be changed next time.



I have two questions regarding this:




  1. How can I pass response to java code and get the array index which having sId == '0003' so that I can use this index to validate?

  2. How can I pass a variable value as an array index in response?


The code below is not working.



def ind = Java.type('karate.Utility.FindIndex') 
response.['#ind'].sId == '0003'






karate






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 3 at 0:42









jtate

1,25421324




1,25421324










asked Jan 2 at 19:56









Raj KumarRaj Kumar

212




212













  • Can you get what you want with JsonPath Filters? As far as I understand your question, you may not need the index itself.

    – Alex J
    Jan 2 at 21:51



















  • Can you get what you want with JsonPath Filters? As far as I understand your question, you may not need the index itself.

    – Alex J
    Jan 2 at 21:51

















Can you get what you want with JsonPath Filters? As far as I understand your question, you may not need the index itself.

– Alex J
Jan 2 at 21:51





Can you get what you want with JsonPath Filters? As far as I understand your question, you may not need the index itself.

– Alex J
Jan 2 at 21:51












1 Answer
1






active

oldest

votes


















2














karate uses json-path which allows writing conditions to read data from JSON.



example:



* def sId = "0003"
* def sValue = karate.jsonPath(response, "$[?(@.sId == '" + sId + "')]")
* match sValue[0] == {"sId" : "0003","sName" : "abc3","sPlace" : "abc13"}


now if there is a match in sId on the response JSON array, all such matches will be returned.




No need to do * match sValue[0].sId == "0003" as this is your filter
criteria




More about JSON path



online JSON path evaluator



karate doc refernce






share|improve this answer


























  • Thanks for your quick response, Yes it is working for me.

    – Raj Kumar
    Jan 3 at 15:05












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54012378%2fkarate-json-response-parsing%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









2














karate uses json-path which allows writing conditions to read data from JSON.



example:



* def sId = "0003"
* def sValue = karate.jsonPath(response, "$[?(@.sId == '" + sId + "')]")
* match sValue[0] == {"sId" : "0003","sName" : "abc3","sPlace" : "abc13"}


now if there is a match in sId on the response JSON array, all such matches will be returned.




No need to do * match sValue[0].sId == "0003" as this is your filter
criteria




More about JSON path



online JSON path evaluator



karate doc refernce






share|improve this answer


























  • Thanks for your quick response, Yes it is working for me.

    – Raj Kumar
    Jan 3 at 15:05
















2














karate uses json-path which allows writing conditions to read data from JSON.



example:



* def sId = "0003"
* def sValue = karate.jsonPath(response, "$[?(@.sId == '" + sId + "')]")
* match sValue[0] == {"sId" : "0003","sName" : "abc3","sPlace" : "abc13"}


now if there is a match in sId on the response JSON array, all such matches will be returned.




No need to do * match sValue[0].sId == "0003" as this is your filter
criteria




More about JSON path



online JSON path evaluator



karate doc refernce






share|improve this answer


























  • Thanks for your quick response, Yes it is working for me.

    – Raj Kumar
    Jan 3 at 15:05














2












2








2







karate uses json-path which allows writing conditions to read data from JSON.



example:



* def sId = "0003"
* def sValue = karate.jsonPath(response, "$[?(@.sId == '" + sId + "')]")
* match sValue[0] == {"sId" : "0003","sName" : "abc3","sPlace" : "abc13"}


now if there is a match in sId on the response JSON array, all such matches will be returned.




No need to do * match sValue[0].sId == "0003" as this is your filter
criteria




More about JSON path



online JSON path evaluator



karate doc refernce






share|improve this answer















karate uses json-path which allows writing conditions to read data from JSON.



example:



* def sId = "0003"
* def sValue = karate.jsonPath(response, "$[?(@.sId == '" + sId + "')]")
* match sValue[0] == {"sId" : "0003","sName" : "abc3","sPlace" : "abc13"}


now if there is a match in sId on the response JSON array, all such matches will be returned.




No need to do * match sValue[0].sId == "0003" as this is your filter
criteria




More about JSON path



online JSON path evaluator



karate doc refernce







share|improve this answer














share|improve this answer



share|improve this answer








edited Jan 3 at 2:13

























answered Jan 3 at 1:44









Babu SekaranBabu Sekaran

2,2911318




2,2911318













  • Thanks for your quick response, Yes it is working for me.

    – Raj Kumar
    Jan 3 at 15:05



















  • Thanks for your quick response, Yes it is working for me.

    – Raj Kumar
    Jan 3 at 15:05

















Thanks for your quick response, Yes it is working for me.

– Raj Kumar
Jan 3 at 15:05





Thanks for your quick response, Yes it is working for me.

– Raj Kumar
Jan 3 at 15:05




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54012378%2fkarate-json-response-parsing%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

Npm cannot find a required file even through it is in the searched directory