JSONPath: содержит фильтр

Привет всем, мне было интересно, знает ли кто-нибудь способ использовать регулярное выражение или подстановочный оператор (или pehaps '%LIKE%' В SQL), поэтому я мог бы использовать JSONPath для поиска в большом наборе данных JSON.

например (и да, я разбираю, а не eval( )ing мои данные в приложении):

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

и я хотел бы иметь возможность просматривать данные следующим образом:

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

где содержимое аргумента является частью или всем значением в { "key" : "value" } пары в моих данных.

на данный момент я нашел только документацию на >, <, = и != реляционные операторы, которые не дают мне гибкость.

кто-нибудь знает, как я могу просто просто JSONPath, чтобы найти эти данные (без необходимости перебирать все записи)?

Я не хочу использовать JSONQuery Dojo, так как для этого потребуется другая библиотека. Однако, он позволяет вам сделать это, здесь их пример:

[?description~‘*the*’]

спросите меня, если вы хотите больше разъяснений вопроса.

3 ответов


nevermind, ребята, нашел способ сделать это, просто используя ECMA внутри JSONPath, хотя это не родной селектор / оператор. Просто используется:

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

метод RegExp test () (который jsonpath evals за кулисами).

Если у кого-то есть лучший ответ, дайте мне знать.


также, может быть, это будет полезно для кого-то. ссылка на обозначение JSONPath

он работает для меня (JMeter 4.0)

=~

соответствует регулярному выражению JavaScript. Например, [?(@.описание =~ /кот.* / i)] соответствует элементам, описание которых начинается с cat (без учета регистра).


Если кто-то хочет решение contains в Java, то это работает с 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;