2010-01-05 19 views
5

Ciao a tutti, mi chiedevo se qualcuno fosse a conoscenza di un modo per utilizzare un'espressione regolare o un operatore jolly (o pehaps '%LIKE%' in SQL) in modo da poter utilizzare JSONPath per eseguire ricerche all'interno di un ampio set di dati JSON.JSONPath: contiene il filtro

Per esempio (e sì, sto analizzando, non eval() ing i miei dati in app):

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

E mi piacerebbe essere in grado di guardare attraverso i dati come questo:

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

dove il contenuto di un argomento è parte o tutto il valore nelle coppie { "key" : "value" } nei miei dati.

Al momento ho trovato solo la documentazione relativa >, <, =, e != operatori relazionali, che non mi danno più di tanto la flessibilità.

Qualcuno sa come posso solo solo JSONPath per trovare questi dati (senza dover scorrere tutte le voci)?

Non voglio usare JSONQuery di Dojo, in quanto ciò richiederebbe un'altra libreria. Tuttavia, ti permette di fare questo, ecco il loro esempio:

[?description~‘*the*’] 

Chiedimi se si vuole più chiarimento della questione.

+0

oh sì, ecco la documentazione - http://goessner.net/articles/JsonPath/ –

risposta

9

non importa, ragazzi, trovato un modo per farlo semplicemente usando ECMA all'interno di JSONPath, anche se questo non è un selettore/operatore nativo. Semplicemente utilizzato:

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

il metodo di prova RegExp() (che JSONPath eval s dietro le quinte).

Se qualcuno ha una risposta migliore, fatemelo sapere.

1

Se qualcuno vuole la contiene soluzione in Java allora questo funziona con JsonPath

Filter<?> filter = Filter.filter(Criteria.where("hey").regex(Pattern.compile(".*find.*"))); 
System.out.println(JsonPath.read(json, "$..[?]", filter)); 

Importazioni

import com.jayway.jsonpath.Criteria; 
import com.jayway.jsonpath.Filter; 
import com.jayway.jsonpath.JsonPath; 
Problemi correlati