2010-01-05 8 views
5

हे सब, मैं सोच रहा था कि अगर कोई नियमित अभिव्यक्ति या वाइल्डकार्ड ऑपरेटर (या पीएस '%LIKE%' एसक्यूएल में उपयोग करने के तरीके के बारे में जानता था) तो मैं JSON डेटा के बड़े सेट के भीतर खोज करने के लिए JSONPath का उपयोग कर सकता था।JSONPath: फ़िल्टर

उदाहरण के लिए

(और हाँ, मैं, अनुप्रयोग में अपने डेटा ing नहीं eval() को पार्स कर रहा हूँ):

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

और मैं इस तरह आंकड़ों के माध्यम से देखने के लिए सक्षम होने के लिए करना चाहते हैं:

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

जहां तर्क की सामग्री मेरे डेटा में { "key" : "value" } जोड़े में भाग या सभी मान है।

पल मैं केवल >, <, = पर प्रलेखन पाया है, और != संबंधपरक ऑपरेटर, जो मुझे बहुत लचीलापन है कि देना नहीं है।

क्या किसी को यह पता है कि मैं सिर्फ JSONPath इस डेटा को खोजने के लिए (सभी प्रविष्टियों के माध्यम से लूप किए बिना) कर सकता हूं?

मैं दोजो के JSONQuery का उपयोग नहीं करना चाहता, क्योंकि इसके लिए एक और लाइब्रेरी की आवश्यकता होगी। हालांकि, यह आपको ऐसा करने देता है, यहां उनके उदाहरण:

[?description~‘*the*’] 

मुझसे पूछें कि क्या आप प्रश्न के अधिक स्पष्टीकरण चाहते हैं।

+0

ओह, हाँ JsonPath के साथ काम करता है, यहाँ प्रलेखन है - http://goessner.net/articles/JsonPath/ –

उत्तर

9

कभी नहीं, लोगों को, JSONPath के अंदर ईसीएमए का उपयोग करके ऐसा करने का एक तरीका मिला, हालांकि यह मूल चयनकर्ता/ऑपरेटर नहीं है। सीधे शब्दों में प्रयोग किया है:

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

RegExp परीक्षण() विधि (जो पर्दे के पीछे JSONPath eval रों)।

यदि किसी के पास कोई बेहतर जवाब है, तो मुझे बताएं।

1

किसी को चाहता है जावा में समाधान होता है तो यह

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;