我有JSON这样的结构:
{
"stores": {
"store1_id": {
"books": {
"book1_ISBN": {
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": "8.95"
},
"book2_ISBN": {
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": "12.99"
}
}
},
"store2_id": {
"books": {
"book3_ISBN": {
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": "22.99"
}
}
}
}
}
我用Jayway JsonPath解析它。我尝试使用这样的表达式获得所有具有小说类别的书籍:
$[?(@.stores.*.books)].stores.*.books[?(@.*.category=="reference")]
但是我得到了空洞的结果,虽然根据操作员的相同记录,我希望我会收到#34;世纪的谚语"书籍节点:
"book1_ISBN": {
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": "8.95"
}
有趣的是,当我使用没有等于运算符的表达式时,
$[?(@.stores.*.books)].stores.*.books[?(@.*.category)]
我得到了所有三本书。为什么我的表达方式与同等的运算符不起作用?
答案 0 :(得分:1)
我在这里试过你的表情:
http://jsonpath.com/?
并且他们都不能使用过滤器和没有过滤器工作。
我不明白你为什么要先过滤这些元素:(@ .stores。*。books)
无论如何,如果你只想过滤所有类别"小说"的书籍,这就更简单了:
$..[?(@.category=="fiction")]
我希望这有帮助。