11

大家好,我想知道是否有人知道使用正则表达式或通配符运算符(或可能'%LIKE%'在 SQL 中)的方法,以便我可以使用 JSONPath 在大量 JSON 数据中进行搜索。

例如(是的,我正在解析,而不是eval( )在应用程序中输入我的数据):

var obj = eval ( '({ "hey": "can you find me?" })' );

我希望能够像这样查看数据:

$.[?(@.hey:contains(find))] // (in jQuery terminology)

其中参数的内容是{ "key" : "value" }我的数据对中的部分或全部值。

目前我只找到关于><=!=关系运算符的文档,它们并没有给我太大的灵活性。

有谁知道我可以只用 JSONPath 找到这些数据的方法(无需遍历所有条目)?

我不想使用 Dojo 的 JSONQuery,因为这需要另一个库。但是,它可以让你这样做,这里是他们的例子:

[?description~‘*the*’]

问我你是否想更清楚地说明这个问题。

4

4 回答 4

20

没关系,伙计们,通过在 JSONPath 中使用 ECMA 找到了一种方法,尽管这不是本机选择器/运算符。简单使用:

$.[?(/find/.test(@.hey))]

RegExp test() 方法(JSONPatheval在幕后)。

不过,如果有人有更好的答案,请告诉我。

于 2010-01-05T02:13:39.503 回答
6

此外,它可能对某人有用。 链接到 JSONPath 表示法

它对我有用(JMeter 4.0)

=~

匹配一个 JavaScript 正则表达式。例如,[?(@.description =~ /cat.*/i)] 匹配描述以 cat 开头的项目(不区分大小写)。

于 2018-06-07T10:26:25.443 回答
4

如果有人想要 Java 中的 contains 解决方案,那么这适用于 JsonPath

Filter<?> filter = Filter.filter(Criteria.where("hey").regex(Pattern.compile(".*find.*")));
System.out.println(JsonPath.read(json, "$..[?]", filter));

进口

import com.jayway.jsonpath.Criteria;
import com.jayway.jsonpath.Filter;
import com.jayway.jsonpath.JsonPath;
于 2017-09-14T11:09:43.667 回答
1

=~为我工作。使用 Jmeter 5.3 JSON 提取器测试。

于 2020-09-16T11:22:21.970 回答