Home > Enterprise >  How to escape "@" when reading from a JSON response?
How to escape "@" when reading from a JSON response?

Time:02-18

Let's say I have below sample JSON response from which I want to extract value for "@type":

{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "phoneNumbers": [
    {
      "@type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "@type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}

Validated using:- http://jsonpath.com/

This works for "number":

$.phoneNumbers.[number]

But cannot get value for "@type":

$.phoneNumbers.[@type]

Tried multiple ways but no luck.

Thanks!

Edits:- added another value in the array for "home", now indexing logic [0,1] doesn't work. Even tried with [:] to fetch all values, but no luck.

CodePudding user response:

You can read in this documentation:

Please note, that the return value of jsonPath is an array, which is also a valid JSON structure.

So basically it always returns an array.

var phoneTypes = jsonPath(json,"$.phoneNumbers.[@type]"); 

result

["iPhone","home"]

if you want one phone you have to use phoneTypes[0] for iPhone

but I higly recommend you to fix your json using this code

var fixedJson=  JSON.parse(JSON.stringify(json).replaceAll("\"@type\"","\"type\"" ));

in this case you can use the real search

var homePhone = jsonPath(fixedJson,"$.phoneNumbers[?(@.type =='home')]")[0].number;

output

0123-4567-8910
  • Related