java - How to assert a JSON node has child nodes with certain values assigned to them? -


i have json string following:

json =  "{\"things\": \n" +     "    {\"thing\": {\n" +     "        \"id\":\"123\",\n" +     "        \"name\":\"yet thing\",\n" +     "        \"price\":\"$12.99\",\n" }\n" +     "    }\n" +     "}"; 

is there way can assert id of thing 123 and it's name "yet thing" in the same statement/assert?

at moment, seem fail using filters:

jsonpath.read(json, "$.things.thing[?(@.id == '123')].name") 

i following exception:

java.lang.illegalargumentexception: invalid container object

is maybe because thereis no array notation [] in json string above? should there be?

on related note, there introduction using hamcrest (with json assert)? know official tutorial, seem wrong...

update: rational was: if several thing elements back, order have no guarantee (so can't match thing[1] (unless looped through them all))? how make sure 1 element has both, right id , right name? if check children separately, don't run risk 1 thing has right name , right id, none has both? (would possible json format, or have array in case anyway, "thing": [ { ... }, { ... } ], ... ?

p.s.: tried use jsonpath above follows in end: assertequals("yet thing", jsonpath.read(json, "$.things.thing[?(@.id == '123')].name")); that's exception might have come from, too. also, asked question on jsonpath mailing list, didn't replies far, hoping might here quicker... :)

the tutorial gives solution problem, seems:

jsonassert.with(json).assertthat("$.things.thing.id", matchers.equalto("123"))     .assertthat("$.things.thing.name", matchers.equalto("yet thing")); 

Comments

Popular posts from this blog

Android layout hidden on keyboard show -

google app engine - 403 Forbidden POST - Flask WTForms -

c - Why would PK11_GenerateRandom() return an error -8023? -