JSONPath:包含过滤器

时间:2010-01-05 00:04:07

标签: javascript jquery regex json jsonpath

嘿所有,我想知道是否有人知道如何使用正则表达式或通配符运算符(或SQL中的pehaps '%LIKE%'),因此我可以使用JSONPath在一大组JSON数据中进行搜索。

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

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

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

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

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

目前我只在><=!=关系运算符上找到了文档,这些文档并没有给我足够的灵活性。< / p>

有没有人知道我可以只是 JSONPath找到这些数据的方式(无需遍历所有条目)?

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

[?description~‘*the*’]

问我是否想要更多澄清这个问题。

4 个答案:

答案 0 :(得分:14)

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

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

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

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

答案 1 :(得分:3)

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

它适用于我(JMeter 4.0)

=~

  

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

=〜为我工作。 经过Jmeter 5.3 JSON提取器测试。