【问题标题】:Jayway JsonPath filtering with predicatesJayway JsonPath 过滤与谓词
【发布时间】:2018-02-13 16:40:16
【问题描述】:

我最近开始使用 Jayway JsonPath,但我对 inpath 过滤的工作方式遇到了麻烦。

所以我的 JSON 看起来像这样:
在顶部,我有可共享的。这些可共享对象有一个名为 user 的数组,其中包含一个 ID 和一个名称,它们还包含一个名为 dataset 的项目,它可以包含任何 json。
这些可共享的内容也可以存在于数据集中。
我的工作 JSON 如下所示:

 {
    "shareable": {
        "user": [ 
            {
                "ID": 1,
                "Name": "Bob"
            },
            {
                "ID": 2,
                "Name": "Charles"
            }
        ],
        "dataSet": [
            { 
                "insulinMeasurement": 
                {
                    "timestamp": "Tuesday Morning",
                    "measurement": 174,
                    "unit": "pmol/L"
                } 
            },
            { 
                "insulinMeasurement": 
                {
                    "timestamp": "Tuesday Noon",
                    "measurement": 80,
                    "unit": "pmol/L"
                } 
            },
            { "shareable": {
                "user": [
                    { 
                        "ID": 3,
                        "Name": "Jim" 
                    }
                ],
                "dataSet": [
                    { 
                        "insulinMeasurement": 
                        {
                            "timestamp": "Tuesday Evening",
                            "measurement": 130,
                            "unit": "pmol/L"
                        } 
                    }
                ]
                }
            },
            { "unshareable": {
                "user": [ 
                    { 
                            "ID": 2,
                            "Name": "Bob"
                    }
                ],
                "dataSet": [
                    { 
                        "insulinMeasurement": 
                        {
                            "timestamp": "Tuesday Night",
                            "measurement": 130,
                            "unit": "pmol/L"
                        } 
                    }
                ]
                }
            }
        ]
    }
}  

所以我想要的是所有具有特定 ID 的用户的共享。所以我认为我将使用的路径如下所示:

$..shareable[ ?(@.user[*].ID == 1 )]

这里有一个硬编码的 ID。这在

$..shareable[ ?(@.user[0].ID == 1 )]

返回第一个 ID 为 1 的任何可共享对象。
我也尝试了一些类似

的东西
$..shareable[ ?(@.user[?(@.ID == 1)]

我认为应该返回用户 ID 为 1 的任何可共享对象。
我会以错误的方式解决这个问题吗?我是否需要以某种方式遍历存在的用户对象?

【问题讨论】:

    标签: java jsonpath


    【解决方案1】:

    好吧,我想通了,所以如果有人偶然发现这个问题,查询应该如下所示:

    $..shareable[?( " + user + " in @.user[*].ID )]

    其中 user 只是 userId 的 int。基本上,右侧会创建一个可共享包含的所有 ID 的列表,并检查请求的 ID 是否存在于其中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 2016-09-12
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多