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 eval
s за кулисами).
Если у кого-то есть лучший ответ, дайте мне знать.
также, может быть, это будет полезно для кого-то. ссылка на обозначение 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;