filter the Json according to string in an array in JSONPATH

前端 未结 3 1734
春和景丽
春和景丽 2021-01-15 10:39

I have a situation where I have json String that has a child as Array that contains only Strings. Is there as way I can get the object reference of the arrays that contains

相关标签:
3条回答
  • 2021-01-15 11:21

    Assuming you are using Goessner JSONPath (http://goessner.net/articles/JsonPath/) the following should work:

    $.Books.History[?(@.Tags.indexOf('Indian') != -1)]
    

    According to the Goessner site, you can use underlying JavaScript inside the ?() filter. You can therefore use the JavaScript indexOf function to check if your Tags array contains the tag 'Indian'.

    See a working example here using this JSONPath query tester: http://www.jsonquerytool.com/sample/jsonpathfilterbyarraycontents

    0 讨论(0)
  • 2021-01-15 11:41

    Did you try to use underscoreJS ? You can get the Indian books like this :

    var data = {"Books:"....};
    
    var indianBooks = _.filter(data.Books.History, function(book) { return _.contains(book.Tags, "Indian"); })
    
    0 讨论(0)
  • 2021-01-15 11:43

    If you're using Goessner JSONPath, $.Books.History[?(@.Tags.indexOf('Indian') != -1)] as mentioned by Duncan above should work.

    If you're using the Jayway Java port (github.com/jayway/JsonPath), then $.Books.History[?(@.Tags[?(@ == 'Indian')] != [])] or more elegantly, use the in operator like this $.Books.History[?('Indian' in @.Tags)]. Tried them both here.

    0 讨论(0)
提交回复
热议问题