我有来自Facebook API的JSON响应,如下所示:
{
"data": [
{
"name": "Barack Obama",
"category": "Politician",
"id": "6815841748"
},
{
"name": "Barack Obama's Dead Fly",
"category": "Public figure",
"id": "92943557739"
}]
}
Run Code Online (Sandbox Code Playgroud)
我想将JSONPath应用于它,只返回类别为"Politician"的结果.从我读过的内容看来,我需要这样做:
$.data[?(@.category=='Politician')]
Run Code Online (Sandbox Code Playgroud)
但根据我发现的测试工具,这不起作用.我发现了另一个问题,表明我应该使用"eq"而不是"==",但这也不起作用.我在这里弄错了什么?
pb2*_*b2q 28
您的查询看起来很好,您的数据和查询使用此JsonPath解析器为我工作.另请参阅该页面上的示例查询以获取更多谓词示例.
您正在使用的测试工具似乎有问题.即使JsonPath站点中的示例返回不正确的结果:
例如,给定:
{
"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
}
}
}
Run Code Online (Sandbox Code Playgroud)
表达式:$.store.book[?(@.length-1)].title,该工具返回所有标题的列表.
小智 7
我没有找到从 json 中的名称-值对中提取值的正确 jsonpath 过滤器语法。
下面是语法和简短的示例 twitter 文档。
本站对测试很有用:
jsonpath 过滤器表达式:
.events[0].attributes[?(@.name=='screen_name')].value
Run Code Online (Sandbox Code Playgroud)
测试文档:
{
"title" : "test twitter",
"priority" : 5,
"events" : [ {
"eventId" : "150d3939-1bc4-4bcb-8f88-6153053a2c3e",
"eventDate" : "2015-03-27T09:07:48-0500",
"publisher" : "twitter",
"type" : "tweet",
"attributes" : [ {
"name" : "filter_level",
"value" : "low"
}, {
"name" : "screen_name",
"value" : "_ziadin"
}, {
"name" : "followers_count",
"value" : "406"
} ]
} ]
}
Run Code Online (Sandbox Code Playgroud)
小智 6
删除引号:
List<Object> bugs = JsonPath.read(githubIssues, "$..labels[?(@.name==bug)]");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86007 次 |
| 最近记录: |