Adam Adam - 1 month ago 8
JSON Question

Using JsonPath when you don't know if you're dealing with an object or array

Given the following JSON:

{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}


We can use a path expression like
$.store.book[*].author
to get all the authors. But what if we don't know beforehand whether
book
is an array or an object, e.g. what if we could have the above JSON but also something like this:

{
"store": {
"book": {
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}


Is there a "generic path" that could be used to get all authors in either case?

Answer

Yes, you could use:

$.store..author

Testable here:

https://jsonpath.curiousconcept.com/

'Hope this helps.