JsonPath / Java 如何在过滤中应用数据类型转换
JsonPath / Java how to apply Data Type conversion in Filtering
我正在使用 Json路径 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类型。因此,我当前用来获取数据的 Json路径设置没有按预期工作
$.data[?(@.insights && @.insights.data && @.insights.data[0].impressions > 0)]
但是,它在某些 Json 路径测试站点上运行良好,例如 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')]
我在编码中对此进行了验证,并使用 Jayway JsonPath Evaluator 在线实施对其进行了测试。
因此,库在内部将值转换为正确的类型以使比较工作。
我正在使用 Json路径 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类型。因此,我当前用来获取数据的 Json路径设置没有按预期工作
$.data[?(@.insights && @.insights.data && @.insights.data[0].impressions > 0)]
但是,它在某些 Json 路径测试站点上运行良好,例如 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')]
我在编码中对此进行了验证,并使用 Jayway JsonPath Evaluator 在线实施对其进行了测试。 因此,库在内部将值转换为正确的类型以使比较工作。