Exclude fields from JSON using JSONPath

我的未来我决定 提交于 2019-12-23 21:45:57

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!