【问题标题】:JsonPath / Java how to apply Data Type conversion in FilteringJsonPath / Java 如何在过滤中应用数据类型转换
【发布时间】: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 让我知道这是否也适合您。
  • 哇,这个技巧很好用。非常感谢!
  • 不错。让我把这个写下来作为一个正确的答案。
  • 当然。我现在已经添加了。

标签: java jsonpath


【解决方案1】:

首先,它没有多大意义,但是将比较值提供为字符串就可以了:

$.data[?(@.insights && @.insights.data && @.insights.data[0].impressions > '0')] 

我在编码中验证了这一点,并使用Jayway JsonPath Evaluator 在线实现对其进行了测试。 因此,库在内部将值转换为正确的类型以进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2020-06-17
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    相关资源
    最近更新 更多