2010-01-05 3 views
5

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

Например (и да, я разбор, не eval() ИНГИ моих данных в приложении):

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

И я хотел бы, чтобы иметь возможность просматривать данные, как это:

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

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

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

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

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

[?description~‘*the*’] 

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

+0

Ах да, вот документация - http://goessner.net/articles/JsonPath/ –

ответ

9

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

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

метод испытание RegExp() (который JSONPath eval с за кадром).

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

1

Если кто хочет содержит решение в 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; 
Смежные вопросы