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 在线实施对其进行了测试。 因此,库在内部将值转换为正确的类型以使比较工作。