【发布时间】:2021-05-15 19:18:46
【问题描述】:
我正在使用 JsonPath java 库https://github.com/json-path/JsonPath
到目前为止,一切都按预期进行。我只尝试解决一个问题,但我没有看到该库提供的任何功能来支持该案例。
从技术上讲,我有一个如下所示的 Json 响应数据
{
"data":[
{
"start_time": "2021-01-26T11:36:10-0800",
"insights": {
"data": [
{
"account_id": "104448579711490",
"campaign_id": "6230174444738",
"adset_id": "6230236298338",
"date_start": "2021-01-12",
"date_stop": "2021-02-10",
"impressions": "81619",
"spend": "33.54"
}
],
"paging": {
"cursors": {
"before": "MAZDZD",
"after": "MAZDZD"
}
}
},
"id": "6230236298338"
}
]
}
如果你观察,impressions 下的值是 STRING 类型,而不是 INTEGER 或 LONG 类型。因此,我用来获取数据的当前 JsonPath 设置没有按预期工作
$.data[?(@.insights && @.insights.data && @.insights.data[0].impressions > 0)]
但是,它在一些 Jsonpath 测试站点上运行良好,例如 https://jsonpath.com/
我正在寻找一个可以帮助JsonPath理解过滤中的条件并自动将impressions下的值转换为INTEGER或LONG的函数。可能是lib的bug,我去看看代码看看能不能改进一下。
如果您有任何解决方法可以使上述设置按预期工作,请告诉我。非常感谢您在这里提供的信息。
更新 @wp78de 提出了一个适用于这种情况的技巧。谢谢。
$.data[?(@.insights && @.insights.data && @.insights.data[0].impressions > '0')]
【问题讨论】:
-
以字符串形式提供比较值似乎可以解决问题:
$.data[?(@.insights && @.insights.data && @.insights.data[0].impressions > '0')]在此处在线使用 Jayways:jsonpath.herokuapp.com 让我知道这是否也适合您。 -
哇,这个技巧很好用。非常感谢!
-
不错。让我把这个写下来作为一个正确的答案。
-
当然。我现在已经添加了。