Reputation: 422
Using a single JSONPath expression alone, is it possible to do some kind of 'OR' or '||' operator. For example, these two JSONPath boolean expressions work to check the severity of a log JSON file:
$..log[?(@.severity == 'WARN')]
$..log[?(@.severity == 'Error')]
But I'd like to do something logically similar to:
$..log[?(@.severity == 'WARN' or @.severity == 'Error')] //this is not correct
Is there any way to do this?
Upvotes: 20
Views: 36258
Reputation: 698
Thank you for your answers. In my use case I got it working by combining the two answers from @sirugh and @elyas-bhy.
$..log[?(@.severity == 'WARN') || ?(@.severity == 'Error')]
Upvotes: 1
Reputation: 792
If you are using Goessner's parser, you can use the ||
operator within your expression as follows:
$..log[?(@.severity == 'WARN' || @.severity == 'Error')]
Upvotes: 25
Reputation: 334
From the JSONPath page:
[,] - Union operator in XPath results in a combination of node sets. JSONPath allows alternate names or array indices as a set.
Try
$..log[?(@.severity == 'WARN'), ?(@.severity == 'Error')]
Edit: Looks like there is an open issue for logical AND and OR operators in which they state that the operators are not yet supported by JSONPath.
Upvotes: 10