2009-05-13 12 views
14

मैं JSONPath को देख रहा हूं और हालांकि यह बहुत अच्छा लगता है, मुझे आश्चर्य है कि किसी ने इसके साथ काम किया है और इसकी उपयोगिता पर टिप्पणी कर सकते हैं, या विकल्पों की सिफारिश कर सकते हैं? वास्तव में क्या होगा यदि JQuery के लिए कोई प्लगइन था जो ऐसा कुछ करता था। मैं प्लगइन्स खोज रहा हूं और खाली हाथ आ रहा हूं। वैसे भी, जब मैं JSONPath (जिसे कुछ पहलुओं पर मैं उत्सुक नहीं हूं) जानने के लिए समय बिताने से पहले, या पहियों को फिर से शुरू करने से पहले, मैंने सोचा कि मैं देखता हूं कि इस पर कोई कोण है ...JSONPath या अन्य XPath उपयोगिता की तरह; या Jquery JSON

देने के लिए

var Characters=[ 
     { 
      id: "CuriousGeorge", 
      species:"Monkey", 
      mood: "curious", 
      appendage: [ 
       { 
        type: "hand", 
        side: "left", 
        holding: [ 
         { id: "Banana" } 
        ] 
       }, 
       { 
        type: "hand", 
        side: "right", 
        holding: [] 
       }, 
       { 
        type: "foot", 
        side: "left", 
        holding: [] 
       }, 
       { 
        type: "foot", 
        side: "right", 
        holding: [ 
         { id: "YellowHat" }, 
         { id: "Keys" } 
        ] 
       } 
      ] 
     }, 
     { 
      id: "ManInYellowHat", 
      species: "Human", 
      mood: "angry", 
      //...ok, you get it... 
     } 
    ] 

यह jQuery के चयनकर्ताओं की तरह कुछ से गहरा वस्तुओं में से कुछ के लिए प्राप्त करने के बढ़िया नहीं होगा कि: यदि आप एक विचार है कि मैं क्या मतलब है, इस जावास्क्रिप्ट वस्तु की कल्पना?

var banana=SomeUtility("Characters holding #Banana").get(0); 
var leftHands=SomeUtility("Characters appendage[type=hand][side=left]").get(); 

(इस दुनिया corniest कोड उदाहरण के लिए अर्हता प्राप्त कर सकते हैं, लेकिन हे, अपने बच्चों को सिर्फ इस देखा था। और मैं एनडीए की वजह से वास्तविक उदाहरण का उपयोग नहीं कर सकते हैं ...)

... और, इसे और अधिक रोचक बनाने के लिए, अगर मैं ऐसी चीज बनाना चाहता था, तो क्या कोई इसका इस्तेमाल करेगा?

+1

एक [जेसन] टैग जोड़ना उचित लगता है। – Tomalak

+0

निश्चित रूप से! जोड़ा गया ... – jlarson

+0

दिलचस्प सवाल। JSON के लिए एक XPath समकक्ष एक बड़ी बात होगी, हालांकि मैंने जो कार्यान्वयन देखा था (JSONPath और dojox.json.query) कुछ कारणों से मुझे अपने स्वयं के वाक्यविन्यास का उपयोग करने लगता है। – Tomalak

उत्तर

4

निश्चित रूप से उपयोगी उपयोगिता होगी।

मेरे राय है कि इस दृष्टिकोण का सबसे अच्छा तरीका के रूप में आप से संकेत मिलता है, सीएसएस चयनकर्ताओं के लिए संभव के रूप में रूप में इसी तरह रहने के लिए होगा। मैं चयनकर्ताओं के jquery के कार्यान्वयन पर हुड के नीचे देखने की अनुशंसा करता हूं।

मैं की तरह

var banana = object.function(jsonObect, "holding #Banana"); 
var leftHands = object.function(jsonObject, "appendage[type=hand][side=left]"); 
बजाय अपने उपयोग उदाहरण के

कुछ सुझाव है।

मुझे यकीन है कि कैसे आगामी native json support इस को प्रभावित करेगा नहीं कर रहा हूँ ...

+0

हां है, ऑब्जेक्ट में गुज़रने से यह समझ जाएगा। मैंने कल रात इस पर कुछ हैकिंग की और संभावनाओं से प्रोत्साहित किया .... और आने के लिए! – jlarson

+0

कृपया मेरा उत्तर देखें, मैंने प्रोटोटाइप – jlarson

2

डोजो के dojo.getObject एक सुविधा है कि काम करता है शिथिल इस तरह है, जहां आप के लिए "abc" की तरह एक पथ प्रदान कर सकता है संपत्ति जो आप लाने के लिए चाहते हैं।

इसे देखें:

http://api.dojotoolkit.org/jsdoc/1.3/dojo.getObject

मैं इसे सरणियों समझता काफी है कि अच्छी तरह नहीं लगता कि और मुझे लगता है कि यह एक आप सुझाव दे रहे हैं की तरह एक पूर्ण विशेषताओं चयनकर्ता भाषा लापता है।

उपयोग के लिए के रूप में, मैं एक आप सुझाव दे रहे हैं जैसे एक चयनकर्ता भाषा कोडित है, लेकिन एक ग्राहक के लिए और सरणी को संबोधित कर उनकी विशेष वस्तु संरचना करने के लिए बहुत मालिकाना है।

मैं निश्चित रूप से यदि आप इसे बनाना चाहते हैं, तो इस तरह की एक प्रणाली का उपयोग करें, और शायद अगर मैं उस क्षेत्र को देखूं जो मैं मदद कर सकता हूं तो योगदान भी दे सकता हूं।

+0

बनाया है मुझे यह एक दिलचस्प, नहीं मिला था। मैं निश्चित रूप से "लंबे एपी चेन के लिए उपयोगी" के पीछे दर्द महसूस करता हूं जहां आपको श्रृंखला में प्रत्येक ऑब्जेक्ट का परीक्षण करना होता है, क्योंकि मुझे कई बार जंक लिखना पड़ता है जैसे var = (बी? सी? डी? बीसीडी: शून्य: शून्य : शून्य); [हालांकि आमतौर पर बहुत अधिक और अन्य स्थितियों सहित]। फिर भी, यह कुल मिलाकर भारी लगता है ...ठीक है, निश्चित रूप से जेसन/जावास्क्रिप्ट ऑब्जेक्ट्स के लिए समांतर jquery- जैसी लाइब्रेरी बनाने के लिए वजन जोड़ना, हालांकि स्पष्ट आवश्यक अंतर होंगे, और मुझे संदेह है कि प्रदर्शन अच्छा होगा ... – jlarson

+0

कृपया मेरा उत्तर देखें, मैंने प्रोटोटाइप – jlarson

4

ठीक है, मैं इस बात के लिए एक प्रोटोटाइप, यहाँ उपलब्ध बनाया है: http://code.google.com/p/jfunk/

यह पहले से ही मेरे लिए उपयोगी साबित हो गया है, तो मैं शायद धीरे-धीरे सुधार होगा और कुछ अच्छा में refactor होगा। लेकिन अगर मुझे अच्छी प्रतिक्रिया मिलती है, तो मैं और तेज़ी से आगे बढ़ सकता हूं। मैं भी मदद का स्वागत करता हूं।

+0

बनाया है अच्छा। मैं बस कोड पर एक त्वरित नज़र था। निश्चित रूप से वहां विचार का मूल हो गया है - इसे और अधिक कुशल बनाने के लिए कुछ संभावित बदलाव हो सकते हैं, लेकिन अभी ठीक काम करना प्रतीत होता है। जब मैं कुछ और समय लेता हूं तो मैं इसे एक या दो सप्ताह में देखता हूं। – cofiem

+0

हां, दक्षता के बारे में भी सोचने का समय नहीं था - यह समझने के अलावा कि डोम के यहां कुछ वास्तविक फायदे हैं। _but_ जो भी कार्य उपयोगी है, वह किसी भी अन्य तरीके से कुशलता से लागू नहीं हो सकता है ... हालांकि यह डेटा को फिर से डिजाइन करने के लिए बहस करेगा ... ओह ठीक है, मुझे लगता है कि यह उपयोगी होगा – jlarson

+0

खाली रेपो और जल्दी से कोई बदलाव नहीं प्रोटोटाइप चरण? – Qrilka

6

JSON Select - JSON के लिए सीएसएस जैसे चयनकर्ता देखें।

+0

लिंक एक गलत वेबसाइट पर इंगित करता है। क्या यह jsonselect.com होना चाहिए? – user152468

+0

@ user152468 यह jsonselect.org पर अब उपलब्ध नहीं है। मैंने अपने गिटहब रेपो में जाने के लिए लिंक अपडेट किया। – orad

3

जेएसपीएथ - https://github.com/dfilatov/jspath का उपयोग करने का प्रयास करें।

जेएसपीएथ एक डोमेन-विशिष्ट भाषा (डीएसएल) है जो आपको अपने JSON दस्तावेज़ों में डेटा नेविगेट करने और खोजने में सक्षम बनाता है। जेएसपीएथ का उपयोग करके, आप जेएसओएन के आइटम का चयन कर सकते हैं ताकि वे डेटा प्राप्त कर सकें।

JSON के लिए जेएसपीएथ एक्सएमएल के लिए XPath की तरह।

1

मैंने अभी क्लाइंटसाइड जेएस-लिब लिखा है जो यह करता है - यह XPath के साथ JSON संरचना से पूछताछ करना संभव बनाता है।

@jlarson - "defiant.js" के साथ, तो आप इस तरह अपने JSON संरचना क्वेरी कर सकता है (इस lib वैश्विक JSON ऑब्जेक्ट फैली):

JSON.search(Characters, '//*[id="Banana"]'); 



इस कॉल एक वापस आ जाएगी मिलान नोड्स के साथ सरणी और उन मैचों को आपके मूल JSON ऑब्जेक्ट से अलग नहीं किया जाएगा (एक्सएमएल + XPath के साथ काम करते समय समान व्यवहार)।

var store = { 
    "book": [ 
     { 
      "id": 1, 
      "price": 8.95, 
      "title": "Sayings of the Century", 
      "category": "reference", 
      "author": "Nigel Rees" 
     }, 
     { 
      "id": 2, 
      "price": 22.99, 
      "title": "The Lord of the Rings", 
      "category": "fiction", 
      "author": "J. R. R. Tolkien", 
      "isbn": "0-395-19395-8" 
     } 
    ] 
}; 

var b1 = JSON.search(store, '//book[1]'); 
b1[0].isbn = '12345'; 

console.log(store.book[0].isbn); 
// 12345 

इस lib ब्राउज़र और clientside के लिए अब तक है, लेकिन मैं अंत में NodeJS के लिए इसे फिर से लिखने के लिए योजनाओं है: उदाहरण देकर स्पष्ट करने के लिए मैं क्या मतलब है, यहाँ एक छोटे से छद्म (-ish) कोड है। यहां एक्सपैथ मूल्यांकनकर्ता देखें; जो कार्यक्षमता का प्रदर्शन करता है। वहाँ भी पूर्व लिखे गए हैं xPath अभिव्यक्ति के साथ-साथ:

http://defiantjs.com/#xpath_evaluator

आप Github पर lib पा सकते हैं:
https://github.com/hbi99/defiant.js

अंत में, "defiant.js" और में एक छोटे से अधिक कार्यक्षमता है यदि आप रुचि रखते हैं, तो आप इसके बारे में उम्मीद करेंगे (http://defiant.com)

मुझे आशा है कि आपको यह उपयोगी लगेगा।

1

ऐसा लगता है कि एक नया विकल्प है: jQuery-JSONPath। ऐसा लगता है कि आप वास्तव में क्या पूछ रहे हैं।

संबंधित मुद्दे