javascript क्या XQuery/XPath का JSON समतुल्य है?




(12)

हाँ, इसे JSONPath कहा जाता है:

यह DOJO में भी एकीकृत है।

जटिल JSON arrays और हैश में आइटमों की खोज करते समय, जैसे:

[
    { "id": 1, "name": "One", "objects": [
        { "id": 1, "name": "Response 1", "objects": [
            // etc.
        }]
    }
]

क्या कोई ऐसी क्वेरी भाषा है जिसका उपयोग मैं in [0].objects where id = 3 एक आइटम खोजने के लिए कर सकता in [0].objects where id = 3 ?


Answer #1

इसे आज़माएं - https://github.com/satyapaul/jpath/blob/master/JSONDataReader.java

एक्सएमएल के लिए एक्सपैथ की इसी पंक्ति पर यह एक बहुत ही सरल कार्यान्वयन है। यह jpath के रूप में नाम है।



Answer #3

मुझे लगता है कि JSONQuery JSONPath का एक सुपरसेट है और इस प्रकार इसे डोजो में बदल देता है । फिर भी RQL

डोजो दस्तावेज से:

JSONQuery सुरक्षा के लिए अतिरिक्त सुविधाओं, उपयोग में आसानी, और फ़िल्टरिंग, रिकर्सिव सर्च, सॉर्टिंग, मैपिंग, रेंज चयन, और वाइल्डकार्ड स्ट्रिंग तुलना और विभिन्न ऑपरेटरों के साथ लचीली अभिव्यक्तियों सहित डेटा क्वेरीिंग टूल का एक व्यापक सेट के साथ JSONPath का विस्तारित संस्करण है।

JSONselect पास प्रश्न पर एक और दृष्टिकोण है (सीएसएस चयनकर्ता की तरह, XPath के बजाए) और इसमें जावास्क्रिप्ट कार्यान्वयन है


Answer #4

अन्य विकल्पों के बारे में मुझे पता है

  1. JSONiq विनिर्देश, जो भाषाओं के दो उपप्रकारों को निर्दिष्ट करता है: वह जो एक्सएमएल विवरण छुपाता है और जेएस-जैसे सिंटैक्स प्रदान करता है, और जो JSON रचनाकारों के साथ XQuery वाक्यविन्यास समृद्ध करता है। Zorba JSONiq लागू करता है।
  2. मार्कोलोगिक के शीर्ष पर बने Corona एक्सएमएल, जेएसओएन, टेक्स्ट और बाइनरी सामग्री को स्टोर करने, प्रबंधित करने और खोजने के लिए एक आरईएसटी इंटरफ़ेस प्रदान करता है।
  3. MarkLogic 6 और बाद में बॉक्स के बाहर कोरोना के समान एक समान इंटरफ़ेस प्रदान करते हैं।
  4. MarkLogic 8 और बाद में उनके XQuery और सर्वर-पक्ष जावास्क्रिप्ट वातावरण दोनों में जेएसओएन का मूल रूप से समर्थन करते हैं। आप उस पर XPath लागू कर सकते हैं।

HTH।


Answer #5

यदि आप मेरे जैसे हैं और आप बस पथ-आधारित लुकअप करना चाहते हैं, लेकिन वास्तविक XPath के बारे में परवाह नहीं करते हैं, तो lodash's _.get() काम कर सकता है। Lodash दस्तावेज़ों से उदाहरण:

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c');
// → 3

_.get(object, ['a', '0', 'b', 'c']);
// → 3

_.get(object, 'a.b.c', 'default');
// → 'default'

Answer #6

Defiant.js भी बहुत अच्छा लग रहा है, यहां एक साधारण उदाहरण है:

var obj = {
        "car": [
            {"id": 10, "color": "silver", "name": "Volvo"},
            {"id": 11, "color": "red",    "name": "Saab"},
            {"id": 12, "color": "red",    "name": "Peugeot"},
            {"id": 13, "color": "yellow", "name": "Porsche"}
        ],
        "bike": [
            {"id": 20, "color": "black", "name": "Cannondale"},
            {"id": 21, "color": "red",   "name": "Shimano"}
        ]
    },
    search = JSON.search(obj, '//car[color="yellow"]/name');

console.log( search );
// ["Porsche"]

var reds = JSON.search(obj, '//*[color="red"]');

for (var i=0; i<reds.length; i++) {
    console.log( reds[i].name );
}
// Saab
// Peugeot
// Shimano

Answer #7

क्या कोई प्रकार की क्वेरी भाषा है ...

jq एक जे SON q यूरी भाषा परिभाषित करता है जो JSONPath के समान है - https://github.com/stedolan/jq/wiki/For-JSONPath-users

... [जो] मैं [0] .objects में एक आइटम खोजने के लिए उपयोग किया जा सकता है जहां id = 3?

मैं इसका मतलब मानूंगा: आईडी == 3 के साथ निर्दिष्ट कुंजी के तहत सभी JSON ऑब्जेक्ट्स को ढूंढें, कोई फर्क नहीं पड़ता कि ऑब्जेक्ट कहां हो सकता है। एक संबंधित जेक क्वेरी होगी:

.[0].objects | .. | objects | select(.id==3)

जहां "|" पाइप-ऑपरेटर (कमांड शेल पाइप के रूप में) है, और जहां सेगमेंट ".. | ऑब्जेक्ट्स" से संबंधित है "कोई फर्क नहीं पड़ता कि वस्तु कहां हो सकती है"।

जेक की मूल बातें काफी हद तक स्पष्ट या अंतर्ज्ञानी हैं या कम से कम काफी सरल हैं, और यदि आप कमांड-शेल पाइप से परिचित हैं तो बाकी के बाकी हिस्सों को चुनना आसान है। Jq FAQ में ट्यूटोरियल और जैसे पॉइंटर्स हैं।

जेक एसक्यूएल की तरह भी है जिसमें यह सीआरयूडी संचालन का समर्थन करता है, हालांकि जेक प्रोसेसर कभी भी इसके इनपुट को ओवरराइट नहीं करता है। जेक जेएसओएन इकाइयों की धाराओं को भी संभाल सकता है।

JSON- उन्मुख क्वेरी भाषा का आकलन करने के लिए आप दो अन्य मानदंडों पर विचार करना चाहेंगे:

  • क्या यह नियमित अभिव्यक्तियों का समर्थन करता है? (जेक 1.5 पीसीआरई रेगेक्स के लिए व्यापक समर्थन है)
  • क्या यह ट्यूरिंग-पूर्ण है? (हां)

Answer #8

@Naftule - "defiant.js" के साथ, XPath अभिव्यक्तियों के साथ JSON संरचना से पूछना संभव है। यह कैसे काम करता है इसका एक अनुमान प्राप्त करने के लिए इस मूल्यांकनकर्ता को देखें:

http://www.defiantjs.com/#xpath_evaluator

JSONPath के विपरीत, "defiant.js" जेएसओएन संरचनाओं पर XPath के क्वेरी सिंटैक्स का पूर्ण-पैमाने समर्थन प्रदान करता है।

Defiant.js का स्रोत कोड यहां पाया जा सकता है:
https://github.com/hbi99/defiant.js


Answer #9

JSON डेटा को ट्रैवर्स / फ़िल्टर करने के लिए कुछ मौजूदा विकल्पों को सारांशित करने के लिए, और कुछ वाक्यविन्यास उदाहरण प्रदान करें ...

  • JSPath
    .automobiles{.maker === "Honda" && .year > 2009}.model

  • जेसन: चयन () (सीएसएस चयनकर्ताओं द्वारा अधिक प्रेरित)
    .automobiles .maker:val("Honda") .model

  • JSONPath (XPath द्वारा अधिक प्रेरित)
    $.automobiles[?(@.maker='Honda')].model

मुझे लगता है कि जेएसपीएथ सबसे अच्छा दिखता है, इसलिए मैं इसे अपने एंगुलरजेएस + केकेपीएचपी ऐप के साथ कोशिश करने और एकीकृत करने जा रहा हूं।

(मैंने मूल रूप से इस उत्तर को किसी अन्य धागे में पोस्ट किया लेकिन सोचा कि यह यहां भी उपयोगी होगा।)


Answer #10

XQuery का उपयोग JSON से पूछताछ के लिए किया जा सकता है, बशर्ते प्रोसेसर JSON समर्थन प्रदान करता हो। यह एक सीधा उदाहरण है कि "id" = 1 के साथ ऑब्जेक्ट खोजने के लिए बेसएक्स का उपयोग कैसे किया जा सकता है:

json:parse('[
    { "id": 1, "name": "One", "objects": [
        { "id": 1, "name": "Response 1", "objects": [ "etc." ] }
    ]}
]')//value[.//id = 1]

Answer #11

ObjectPath XPath या JSONPath की तरह एक क्वेरी भाषा है, लेकिन एम्बेडेड अंकगणितीय गणना, तुलना तंत्र और अंतर्निहित कार्यों के लिए बहुत अधिक शक्तिशाली धन्यवाद। वाक्यविन्यास देखें:

दुकान में लाल रंग के सभी जूते और 50 से कम कीमत में खोजें

$ .. जूते। * [रंग "लाल" और मूल्य <50] है





xquery