问题
I am getting a JSON response from REST service call and want to select only some of the fields from response. I am using JSONPath to filter out the fields. Below is the JSON example:
{
"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
}
}
}
E.g. I want to select author and title from the response where category is 'reference'. I am using the below JSONPath
$.store.book[?(@.category='reference')]
This gives me below response:
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
}
However, I don't want all the fields. I only want author and title. If I try $.store.book[?(@.category='reference')]['author']
, it gives me author name but if I try $.store.book[?(@.category='reference')]['author', 'title']
, it doesn't return anything.
Is there any provision in JSONPath to select (or exclude) fields with or without condition?
I am using http://jsonpath.curiousconcept.com/ to test JSONPath.
Thanks in advance.
回答1:
Your post doesn't say whether you are using Goessner or Flow Communications JSON Path expression evaluator. Both are available on the expression tester site you are using. If you are using Goessner the following query works, but not on the expression testing site you are using
$.store.book[?(@.category=='reference')]['author','title']
Note the double equal sign (@.category=='reference'
) instead of a single one. Also, there should be no space after the comma where selecting the fields 'author','title'
.
You can see the expression working here http://www.jsonquerytool.com/sample/jsonpathselectmultiplefields
回答2:
Using Jayways JsonPath (Java) this works:
$.store.book[?(@.category == 'reference')]['author', 'title']
Test different implementations here
回答3:
What if you try this:
$.store.book[?(@.category='reference')]['author']['title']
回答4:
With jq :
$ jq '.store.book[] | select(.category=="reference") | .author, .title' json
OUTPUT:
"Nigel Rees"
"Sayings of the Century"
来源:https://stackoverflow.com/questions/27820289/exclude-fields-from-json-using-jsonpath