JSONPath:包含过滤器

Posted

技术标签:

【中文标题】JSONPath:包含过滤器【英文标题】:JSONPath :contains filter 【发布时间】:2011-01-01 11:23:13 【问题描述】:

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

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

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

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

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

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

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

有谁知道我可以 JSONPath 来查找此数据(无需遍历所有条目)?

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

[?description~‘*the*’]

如果您想进一步澄清问题,请询问我。

【问题讨论】:

哦,是的,这是文档 - goessner.net/articles/JsonPath 【参考方案1】:

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

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

RegExp test( ) 方法(JSONPath evals 在幕后)。

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

【讨论】:

【参考方案2】:

另外,它可能对某人有用。 Link to JSONPath Notation

它适用于我 (JMeter 4.0)

=~

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

【讨论】:

【参考方案3】:

如果有人想要 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;

【讨论】:

【参考方案4】:

=~ 为我工作。 使用 Jmeter 5.3 JSON Extractor 测试。

【讨论】:

以上是关于JSONPath:包含过滤器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 dojox.jsonPath.query 过滤/查询日期

针对另一个表达式的JSONPath或JMESPath过滤

jsonpath的使用

JsonPath —— JSON 解析神器

使用 jsonpath_ng 检查数组中的元素失败并出现 JsonPathParseError

NLog 包含过滤器未生效