क्या JSON के लिए कोई क्वेरी भाषा है?


227

क्या JSON की क्वेरी के लिए लगभग (लगभग) SQL या XQuery जैसी भाषा है?

मैं बहुत छोटे डेटासेटों के बारे में सोच रहा हूं, जो JSON के लिए अच्छी तरह से मैप करते हैं, जहां आसानी से "जैसे कि X के सभी मान कहां हैं Y> 3" या सामान्य SUM / COUNT प्रकार के संचालन करने के लिए प्रश्नों का उत्तर देना अच्छा होगा।

पूरी तरह से बने उदाहरण के रूप में, कुछ इस तरह से:

[{"x": 2, "y": 0}}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]

SUM(X) WHERE Y > 0     (would equate to 7)
LIST(X) WHERE Y > 0    (would equate to [3,4])

मुझे लगता है कि यह क्लाइंट-साइड और सर्वर-साइड दोनों के लिए उपयुक्त भाषा-विशिष्ट डेटा संरचना में परिवर्तित होने के साथ काम करेगा (या शायद JSON रखा गया है)

एक त्वरित Googling का सुझाव है कि लोगों ने इसके बारे में सोचा है और कुछ चीजों ( JAQL ) को लागू किया है , लेकिन ऐसा नहीं लगता है कि पुस्तकालयों का मानक उपयोग या सेट अभी तक उभरा है। हालांकि प्रत्येक फ़ंक्शन अपने आप पर लागू करने के लिए काफी तुच्छ है, अगर किसी ने पहले से ही इसे सही किया है तो मैं पहिया का फिर से आविष्कार नहीं करना चाहता।

कोई सुझाव?

संपादित करें: यह वास्तव में एक बुरा विचार हो सकता है या JSON जो मैं सोच रहा हूं उसके लिए एक प्रारूप भी सामान्य हो सकता है .. सीधे तौर पर जरूरत के अनुसार केवल सारांश / आदि कार्य करने के बजाय एक क्वेरी भाषा चाहने का कारण यह है कि मैं निर्माण की उम्मीद करता हूं उपयोगकर्ता-इनपुट पर आधारित गतिशील रूप से क्वेरीज़। किंडा को यह तर्क पसंद है कि "हमें एसक्यूएल की आवश्यकता नहीं है, हम केवल उन कार्यों को लिख सकते हैं जिनकी हमें आवश्यकता है"। आखिरकार या तो हाथ से निकल जाता है या फिर आप एसक्यूएल का अपना संस्करण लिखना शुरू कर देते हैं क्योंकि आप इसे और आगे बढ़ाते हैं। (ठीक है, मुझे पता है कि एक मूर्खतापूर्ण तर्क है, लेकिन आपको यह विचार मिलता है ..)


मेरी भी ऐसी जरूरत है। मुझे ऑब्जेक्ट ट्री में विशिष्ट स्थानों पर विशिष्ट मान द्वारा आने वाले JSON अनुरोधों का मिलान करने की आवश्यकता है। क्वेरी को वास्तव में एक (पावर) उपयोगकर्ता द्वारा कॉन्फ़िगर किया जाना है। वर्तमान वर्कअराउंड JSON से एक मेक-शिफ्ट XML का निर्माण और XPath को लागू करना है।
व्लादिमीर Dyuzhev

1
यह एक शेल टूल का अधिक है, लेकिन jq ( stedolan.github.io/jq ) आगजनी डेटा की खोज के लिए बहुत बढ़िया है। खेल के मैदान में इसे आज़माएँ: jqplay.org
jtmoulia

एक वेब-आधारित उपकरण है जो आपको SQL JALS फ़ीड्स या sqall.co पर APIs चलाने की अनुमति देता है ।
स्टैक मैन


पर और अधिक विचार stackoverflow.com/questions/1955505/...
wisbucky

जवाबों:


91

ज़रूर, कैसे:

वे सभी प्रगति में एक सा काम लगते हैं, लेकिन कुछ हद तक काम करते हैं। वे भी XPath और XQuery के समान हैं; भले ही XML और JSON के अलग-अलग वैचारिक मॉडल (पदानुक्रम बनाम ऑब्जेक्ट / संरचना) हैं।

EDIT Sep-2015: वास्तव में अब JSON पॉइंटर मानक है जो JSON सामग्री के बहुत ही सरल और कुशल ट्रैवर्सल की अनुमति देता है। यह न केवल औपचारिक रूप से निर्दिष्ट है, बल्कि कई JSON लाइब्रेरी द्वारा समर्थित है। इसलिए मैं इसे वास्तविक वास्तविक उपयोगी मानक कहूंगा, हालांकि इसकी सीमित अभिव्यक्ति के कारण इसे प्रति भाषा क्वेरी भाषा नहीं माना जा सकता है या नहीं।


77
दूसरे शब्दों में, कुछ भी मानक और स्थिर नहीं है ... :-(
व्लादिमीर Dyuzhev

मानक के बारे में बात करते हुए, मैंने एक अफवाह सुनी कि XQuery 3.1 को JSON प्रश्नों ( JSONiq के समान ) का समर्थन करने के लिए बढ़ाया जा सकता है । बेशक, यह कुछ समय ले सकता है क्योंकि XQuery 3.0 आधिकारिक तौर पर अभी तक जारी नहीं किया गया है।
जूलियन रिबोन

हे दया, मैं निश्चित रूप से आशा नहीं करता। सभी XML-> JSON के प्रयासों से मैंने देखा कि भयानक गड़बड़ियाँ हैं - सूचना मॉडल असंगत हैं। लेकिन मैं JQuery को समान विचारों, वाक्यविन्यास के कुछ हिस्सों का उपयोग करके देखना चाहूंगा; सिर्फ JSON जानकारी मॉडल में ठीक से संशोधित।
स्टेक्समैन

1
JSONPath के एक रूबी कार्यान्वयन की तलाश करने वाले किसी व्यक्ति के लिए: github.com/joshbuddy/jsonpath
रॉबर्ट रॉस

@ गौट: मोंगोडीबी का उपयोग करते हुए, यदि आपके पास वह स्वतंत्रता है, तो एक व्यवहार्य दृष्टिकोण की तरह लगता है। ( क्वेरी को बिल्ट-इन शेल में कैसे ट्रांसलेट करें , इसके एक उदाहरण के लिए नीचे देखें )
सर्व-इन

48

मुझे लगता है मैं jLinq बुलाया पर काम कर रहा हूँ मेरी परियोजना की सिफारिश करेंगे । मैं प्रतिक्रिया के लिए देख रहा हूँ तो मुझे सुनने में दिलचस्पी होगी कि आप क्या सोचते हैं।

यदि आप कैसे LINQ में होगा के समान प्रश्न लिखने देता है ...

var results = jLinq.from(records.users)

    //you can join records
    .join(records.locations, "location", "locationId", "id")

    //write queries on the data
    .startsWith("firstname", "j")
    .or("k") //automatically remembers field and command names

    //even query joined items
    .equals("location.state", "TX")

    //and even do custom selections
    .select(function(rec) {
        return {
            fullname : rec.firstname + " " + rec.lastname,
            city : rec.location.city,
            ageInTenYears : (rec.age + 10)
        };
    });

यह पूरी तरह से एक्स्टेंसिबल भी है!

प्रलेखन अभी भी जारी है, लेकिन आप अभी भी इसे ऑनलाइन आज़मा सकते हैं।


@hugoware: क्या इसके लिए कोई दस्तावेज है? क्या .starts () (जैसे सम्‍मिलित हैं?) के अलावा कोई प्रश्‍न हैं
रिक्‍की

5
अंतिम अद्यतन 8 साल पहले और यह पूछे जाने पर कोई प्रतिक्रिया नहीं कि क्या परियोजना 5 साल पहले मर चुकी है ... मुझे लगता है कि परियोजना मर चुकी है।
cfc

36

अपडेट: XQuery 3.1 XML या JSON - या दोनों को एक साथ क्वेरी कर सकता है। और XPath 3.1 भी कर सकते हैं।

सूची बढ़ रही है:


14

jmespath वास्तव में काफी आसान और अच्छी तरह से काम करता है, http://jmespath.org/ इसका उपयोग Amazon द्वारा AWS कमांड लाइन इंटरफ़ेस में किया जा रहा है, इसलिए यह काफी स्थिर हो गया है।


5
फिर भी एक ही पृष्ठ पर एक ही समय में: "यदि आपको अधिक उन्नत सुविधाओं की आवश्यकता है - जो कि संभव नहीं है --query के साथ, तो आप jq, कमांड लाइन JSON प्रोसेसर की जांच कर सकते हैं।" तो ऐसा लगता है कि AWS पैरामीटर के jmespathलिए उपयोग करता है --query, लेकिन jqकमांड लाइन पाइपिंग के लिए सिफारिश करता है । docs.aws.amazon.com/cli/latest/userguide/…
wisbucky

10

JQ एक है जम्मू बेटे क्ष uery भाषा, मुख्य रूप से प्रोग्रामिंग भाषाओं (जावा, Node.js, php, ...) और के माध्यम से ब्राउज़र में भी उपलब्ध की एक विस्तृत श्रृंखला के लिए कमांड लाइन के लिए लेकिन बाइंडिंग के साथ इरादा JQ-वेब

यहाँ मूल प्रश्न पर आधारित कुछ चित्र दिए गए हैं, जिन्होंने इस JSON को एक उदाहरण के रूप में दिया:

 [{"x": 2, "y": 0}}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]

SUM (X) कहां Y> 0 (7 के बराबर होगा)

map(select(.y > 0)) | add

LIST (X) कहां Y> 0 ([3,4] के बराबर होगा)

map(.y > 0)

jq सिंटैक्स JSON सिंटैक्स का विस्तार करता है

हर JSON अभिव्यक्ति एक वैध jq अभिव्यक्ति है, और जैसे कि [1, (1+1)]{"a": (1 + 1)} `यह वर्णन करता है कि jq JSON सिंटैक्स का विस्तार कैसे करता है।

एक अधिक उपयोगी उदाहरण jq अभिव्यक्ति है:

{a,b}

जो, JSON मूल्य को देखते हुए {"a":1, "b":2, "c": 3}, का मूल्यांकन करता है {"a":1, "b":2}


8

अंतर्निहित array.filter()विधि इनमें से अधिकांश तथाकथित जावास्क्रिप्ट क्वेरी लाइब्रेरी को अप्रचलित बनाती है

आप प्रतिनिधि के अंदर उतनी ही शर्तें रख सकते हैं जितनी आप कल्पना कर सकते हैं: सरल तुलना, शुरुआत, आदि। मैंने परीक्षण नहीं किया है, लेकिन आप शायद आंतरिक संग्रह को क्वेरी करने के लिए भी घोंसला फ़िल्टर कर सकते हैं।


5
array.filter()जावास्क्रिप्ट का हिस्सा है, JSON नहीं है।
इयॉन सैमुअल मैकलीन एल्डर

2
JSON जावास्क्रिप्ट का एक उपसमुच्चय है, लेकिन ऐसी बहुत सी भाषाएं हैं जो JSON और सरणियों का समर्थन करती हैं और जिनके पास एक सरणी फ़िल्टर विधि लागू है, इसलिए यह एक मान्य बिंदु है।
डाक

7

यदि आप .NET का उपयोग कर रहे हैं तो Json.NET , JSON के शीर्ष पर LINQ प्रश्नों का समर्थन करता है। इस पोस्ट के कुछ उदाहरण हैं। यह फ़िल्टरिंग, मैपिंग, ग्रुपिंग आदि का समर्थन करता है।


7

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

उदाहरण

पायथन संस्करण परिपक्व और उत्पादन में उपयोग किया जाता है। जेएस अभी भी बीटा में है।

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


1
सिवाय इसके कि इसके पास शायद ही कोई दस्तावेज है, इसलिए यह मुश्किल है कि यह कैसे पता लगाया जाए कि कुछ जैसे पाठ के साथ तत्वों को कैसे खोजें।
जेम्स ओ'ब्रायन

1
@ JamesO'Brien आपकी टिप्पणी के लिए धन्यवाद - यदि आप संदर्भ को बेकार पाते हैं और मन में कोई विशेष समस्या है, तो हमें यहां बताएं - कोई व्यक्ति मदद करने का प्रयास करेगा। वर्तमान में हम डॉक्स को अधिक उपयोगी बनाने पर काम कर रहे हैं, मुझे आपकी टिप्पणियाँ पसंद आएंगी।
इला बेदनरेक

धन्यवाद मैं इसकी सराहना करता हूँ। मैं उपयोग करना चाहूंगा। वर्तमान में मैं ashphy.com/JSONPathOnlineEvaluator का उपयोग कर रहा हूं ?
जेम्स ओ ब्रायन

प्रलेखन की कुल कमी के कारण जावास्क्रिप्ट के साथ इसका उपयोग कैसे करें यह पता नहीं लगा सका।
user3670743

हम इसमें मदद करने के लिए योगदानकर्ताओं की तलाश कर रहे हैं। आप गितुब या Google समूह समूहों पर लिख सकते हैं। Googleforum/#/members/objectpath जो आप प्राप्त करना चाह रहे हैं, और मुझे यकीन है कि कोई आपके Qs का उत्तर देगा।
इला बेदनरेक

6

इसे देखने का एक और तरीका है mongoDB का उपयोग करना। आप अपने JSON को मोंगो में स्टोर कर सकते हैं और फिर इसे mongodb क्वेरी सिंटैक्स के माध्यम से क्वेरी कर सकते हैं।


MongoDB उपयोग करने के लिए बहुत अच्छा है। उदाहरण के लिए नीचे देखें कि कैसे उपयोग करें।
सर्व-

4

ठीक है, यह पोस्ट थोड़ी पुरानी है, लेकिन ... यदि आप जेएस ऑब्जेक्ट्स पर मूल JSON (या JS ऑब्जेक्ट्स) में SQL जैसी क्वेरी करना चाहते हैं, तो https://github.com/deitch/searchjs पर एक नज़र डालें

यह एक jsql भाषा है जो पूरी तरह से JSON में लिखी गई है, और एक संदर्भ कार्यान्वयन है। आप कह सकते हैं, "मैं एक सरणी में सभी ऑब्जेक्ट ढूंढना चाहता हूं, जिसका नाम ===" जॉन "और& उम्र === 25 है:

{name:"John",age:25,_join:"AND"}

संदर्भ कार्यान्वयन सर्चजे ब्राउज़र के साथ-साथ नोड npm पैकेज में भी काम करता है

npm install searchjs

यह जटिल जोड़ और नकार (नॉट) जैसी चीजें भी कर सकता है। यह मूल रूप से मामले की अनदेखी करता है।

यह अभी तक समन या गणना नहीं करता है, लेकिन शायद बाहर वालों को करना आसान है।


3

यहाँ कुछ सरल जावास्क्रिप्ट पुस्तकालयों कि चाल भी करेंगे:

  • डॉलर क्यू एक अच्छा हल्का पुस्तकालय है। यह jQuery द्वारा लोकप्रिय चाइनिंग सिंटैक्स के लिए एक परिचित अनुभव है और केवल 373 SLOC है।
  • SpahQL XPath ( होमपेज , Github) के समान एक सिंटैक्स के साथ पूरी तरह से चित्रित क्वेरी भाषा है
  • jFunk CSS / jQuery चयनकर्ताओं के समान सिंटैक्स के साथ प्रगति क्वेरी भाषा में है। यह आशाजनक लग रहा था, लेकिन प्रारंभिक प्रतिबद्ध में इसके परे कोई विकास नहीं हुआ है।

  • (जोड़ा गया 2014): jq कमांड लाइन टूल में एक साफ वाक्यविन्यास है, लेकिन दुर्भाग्य से यह एसी लाइब्रेरी है। उदाहरण का उपयोग:

    < package.json jq '.dependencies | to_entries | .[] | select(.value | startswith("git")) | .key'


3

में MongoDB हैं, तो यह (मोंगो खोल में, वहाँ मौजूद अपनी पसंद का एक भाषा के लिए ड्राइवरों) काम करेगा है।

db.collection.insert({"x": 2, "y": 0}); // notice the ':' instead of ','
db.collection.insert({"x": 3, "y": 1});
db.collection.insert({"x": 4, "y": 1});

db.collection.aggregate([{$match: {"y": {$gt: 0}}}, 
                         {$group: {_id: "sum", sum: {$sum: "$x"}}}]);
db.collection.aggregate([{$match: {"y": {$gt: 0}}}, 
                         {$group: {_id: "list", list: {$push: "$x"}}}]);

पहले तीन आदेश आपके संग्रह में डेटा सम्मिलित करते हैं। (बस mongodसर्वर शुरू करें और mongoक्लाइंट के साथ जुड़ें ।)

अगले दो डेटा प्रोसेस करते हैं। $matchफ़िल्टर, क्रमशः , $groupलागू होता है sumऔर list


2

SpahQL सबसे अधिक आशाजनक और अच्छी तरह से सोचा है, जहां तक ​​मैं बता सकता हूं। मैं इसकी गहन जांच की अनुशंसा करता हूं।


2


मैंने अभी-अभी एक क्लाइंटसाइड JS-lib (defiant.js) का एक भरोसेमंद संस्करण समाप्त किया है जो आपको वही दिख रहा है जो आप खोज रहे हैं। Defiant.js के साथ, आप एक JSON संरचना को XPath अभिव्यक्तियों के साथ क्वेरी कर सकते हैं, जिनसे आप परिचित हैं (JSONPath में कोई नया वाक्यविन्यास अभिव्यक्ति नहीं)।

यह कैसे काम करता है इसका उदाहरण (इसे यहां ब्राउज़र में देखें http://defiantjs.com/defiant.js/demo/sum.avg.htm ):

var data = [
       { "x": 2, "y": 0 },
       { "x": 3, "y": 1 },
       { "x": 4, "y": 1 },
       { "x": 2, "y": 1 }
    ],
    res = JSON.search( data, '//*[ y > 0 ]' );

console.log( res.sum('x') );
// 9
console.log( res.avg('x') );
// 3
console.log( res.min('x') );
// 2
console.log( res.max('x') );
// 4

जैसा कि आप देख सकते हैं, DefiantJS एक खोज फ़ंक्शन के साथ वैश्विक ऑब्जेक्ट JSON का विस्तार करता है और एग्री किए गए कार्यों के साथ लौटाया गया सरणी दिया जाता है। DefiantJS में कुछ अन्य फ़ंक्शंस हैं, लेकिन वे इस विषय के दायरे से बाहर हैं। Anywho, आप एक क्लाइंट एक्सपीथ इवैल्यूएटर के साथ काम का परीक्षण कर सकते हैं। मुझे लगता है कि XPath से परिचित लोग इस मूल्यांकनकर्ता को उपयोगी नहीं पाएंगे।
http://defiantjs.com/#xpath_evaluator

Defiant.js के बारे में अधिक जानकारी
http://defiantjs.com/
https://github.com/hbi99/defiant.js के

मुझे आशा है कि आप इसे उपयोगी पाएंगे ... सादर


क्या वर्तमान में परिणामों के लिए पूर्ण पथ प्राप्त करना संभव है?
XeniaSis

2
  1. गूगल के पास एक प्रोजेक्ट है जिसका नाम है लवफील्ड ; बस इसके बारे में पता चला है, और यह दिलचस्प लग रहा है, हालांकि यह अंडरस्कोर या लॉश में बस छोड़ने से अधिक शामिल है।

    https://github.com/google/lovefield

लवफील्ड शुद्ध जावास्क्रिप्ट में लिखा गया एक रिलेशनल क्वेरी इंजन है। यह ब्राउज़र की ओर से डेटा को बनाए रखने में मदद भी प्रदान करता है, जैसे कि स्थानीय रूप से डेटा को स्टोर करने के लिए IndexedDB का उपयोग करना। यह SQL- जैसे सिंटैक्स प्रदान करता है और क्रॉस-ब्राउज़र (वर्तमान में Chrome 37+, फ़ायरफ़ॉक्स 31+, IE 10+ और सफारी 5.1 ... का समर्थन करता है।


  1. इस अंतरिक्ष में हाल ही में एक और दिलचस्प प्रविष्टि जिसे jinqJs कहा जाता है ।

    http://www.jinqjs.com/

    संक्षेप में उदाहरणों की समीक्षा करते हुए , यह आशाजनक लगता है, और एपीआई दस्तावेज़ अच्छी तरह से लिखा हुआ प्रतीत होता है।


function isChild(row) {
  return (row.Age < 18 ? 'Yes' : 'No');
}

var people = [
  {Name: 'Jane', Age: 20, Location: 'Smithtown'},
  {Name: 'Ken', Age: 57, Location: 'Islip'},
  {Name: 'Tom', Age: 10, Location: 'Islip'}
];

var result = new jinqJs()
  .from(people)
  .orderBy('Age')
  .select([{field: 'Name'}, 
     {field: 'Age', text: 'Your Age'}, 
     {text: 'Is Child', value: isChild}]);

jinqJs एक छोटी, सरल, हल्की और एक्स्टेंसिबल जावा स्क्रिप्ट लाइब्रेरी है जिसमें कोई निर्भरता नहीं है। jinqJs SQL को javaScript सरणियों, संग्रह और वेब सेवाओं पर क्वेरीज़ की तरह प्रदर्शन करने का एक सरल तरीका प्रदान करता है जो JSON प्रतिक्रिया देता है। jinqJs .Net के लिए Microsoft की लैम्ब्डा अभिव्यक्ति के समान है, और यह सिंटैक्स और SQL की तरह कार्यक्षमता का उपयोग करके क्वेरी संग्रह के लिए समान क्षमता प्रदान करता है। jinqJs का उद्देश्य LINQ प्रश्नों से परिचित प्रोग्रामर को एक SQL जैसा अनुभव प्रदान करना है।


1

मैं सिर्फ अपनी स्वयं की जावास्क्रिप्ट का उपयोग करने की धारणा को दूसरे स्थान पर रखूंगा, लेकिन कुछ अधिक परिष्कृत के लिए आप डोजो डेटा को देख सकते हैं । इसका उपयोग नहीं किया गया है, लेकिन ऐसा लगता है कि यह आपको मोटे तौर पर उस तरह का क्वेरी इंटरफ़ेस देता है जिसकी आप तलाश कर रहे हैं।


1

वर्तमान Jql कार्यान्वयन एक Hadoop क्लस्टर का उपयोग करके बड़े डेटा प्रोसेसिंग को लक्षित करता है, इसलिए यह आपकी आवश्यकता से अधिक हो सकता है। हालांकि, यह एक हडोप क्लस्टर के बिना आसानी से चलता है (लेकिन फिर भी इसे प्राप्त करने के लिए हाडोप कोड और इसकी निर्भरता की आवश्यकता होती है, जो ज्यादातर शामिल हैं)। जाकल का एक छोटा कार्यान्वयन जिसे जावास्क्रिप्ट में एम्बेड किया जा सकता है और एक ब्राउज़र परियोजना के लिए एक बढ़िया अतिरिक्त होगा।

ऊपर दिए गए आपके उदाहरण आसानी से jaql में लिखे गए हैं:

$data = [{"x": 2, "y": 0}, {"x": 3, "y": 1}, {"x": 4, "y": 1}];

$data -> filter $.y > 0 -> transform $.x -> sum(); // 7

$data -> filter $.y > 0 -> transform $.x; // [3,4]

बेशक, वहाँ बहुत अधिक है। उदाहरण के लिए:

// Compute multiple aggregates and change nesting structure:
$data -> group by $y = $.y into { $y, s:sum($[*].x), n:count($), xs:$[*].x}; 
    // [{ "y": 0, "s": 2, "n": 1, "xs": [2]   },
    //  { "y": 1, "s": 7, "n": 2, "xs": [3,4] }]

// Join multiple data sets:
$more = [{ "y": 0, "z": 5 }, { "y": 1, "z": 6 }];
join $data, $more where $data.y == $more.y into {$data, $more};
    // [{ "data": { "x": 2, "y": 0 }, "more": { "y": 0, "z": 5 }},
    //  { "data": { "x": 3, "y": 1 }, "more": { "y": 1, "z": 6 }},
    //  { "data": { "x": 4, "y": 1 }, "more": { "y": 1, "z": 6 }}]

Jaql को http://code.google.com/p/jaql/ पर डाउनलोड / चर्चा की जा सकती है


1

आप अंडरस्कोर.जे का भी उपयोग कर सकते हैं जो मूल रूप से संग्रह में हेरफेर करने के लिए एक स्विस-चाकू पुस्तकालय है। का उपयोग करते _.filterहुए _.pluck, _.reduceआप एसक्यूएल जैसी क्वेरी कर सकते हैं।

var data = [{"x": 2, "y": 0}, {"x": 3, "y": 1}, {"x": 4, "y": 1}];

var posData = _.filter(data, function(elt) { return elt.y > 0; });
// [{"x": 3, "y": 1}, {"x": 4, "y": 1}]

var values = _.pluck(posData, "x");
// [3, 4]

var sum = _.reduce(values, function(a, b) { return a+b; });
// 7

Underscore.js क्लाइंट-साइड और सर्वर-साइड दोनों काम करता है और एक उल्लेखनीय पुस्तकालय है।

आप लो-डैश का भी उपयोग कर सकते हैं जो बेहतर प्रदर्शन के साथ अंडरस्कोर।जेएस का कांटा है।


1

जब भी संभव होगा मैं सर्वर (एसक्यूएल डीबी या अन्य मूल डेटाबेस प्रकार) पर बैकएंड के सभी क्वेरी को स्थानांतरित कर दूंगा। कारण यह है कि यह क्वेरी करने के लिए अधिक तेज़ और अधिक अनुकूलित होगा।

मुझे पता है कि jSON अकेले खड़ी हो सकती है और एक क्वेरी भाषा होने के लिए +/- हो सकती है लेकिन मैं लाभ नहीं देख सकता यदि आप बैकएंड से एक ब्राउज़र के डेटा को पुनः प्राप्त कर रहे हैं, क्योंकि अधिकांश JSON केस का उपयोग करते हैं। क्वेरी और बैकएंड पर फ़िल्टर करने के लिए छोटे डेटा की आवश्यकता होती है।

यदि किसी भी कारण से आपको फ्रंट-एंड पर (अधिकतर ब्राउज़र में) क्वेरी करने की आवश्यकता है, तो मैं सिर्फ array.filter (कुछ और क्यों आविष्कार करता हूं?) का उपयोग करने का सुझाव दूंगा।

उन्होंने कहा कि मुझे लगता है कि यह अधिक उपयोगी होगा जो कि json के लिए एक परिवर्तन एपीआई है ... वे तब से अधिक उपयोगी होते हैं जब आपके पास वह डेटा होता है जिसे आप कई तरीकों से प्रदर्शित करना चाहते हैं। हालांकि, फिर से, आप क्लाइंट की तुलना में सर्वर पर बहुत कुछ कर सकते हैं (जो कि स्केल के लिए बहुत आसान हो सकता है) - यदि आप सर्वर का उपयोग कर रहे हैं <-> क्लाइंट मॉडल।

बस मेरे 2 पेंस लायक!


1

की जाँच करें https://github.com/niclasko/Cypher.js (ध्यान दें: मैं लेखक हूँ)

यह एक शून्य-निर्भरता जावास्क्रिप्ट ग्राफ डेटाबेस डेटाबेस क्वेरी भाषा के साथ एक ग्राफ डेटाबेस के साथ कार्यान्वयन है। यह ब्राउज़र में चलता है (फ़ायरफ़ॉक्स, क्रोम, IE के साथ परीक्षण किया गया)।

प्रश्न की प्रासंगिकता के साथ। इसका उपयोग JSON के समापन बिंदुओं को क्वेरी करने के लिए किया जा सकता है:

load json from "http://url/endpoint" as l return l limit 10

यहां एक जटिल JSON दस्तावेज़ को क्वेरी करने और उस पर विश्लेषण करने का एक उदाहरण दिया गया है:

Cypher.js JSON क्वेरी उदाहरण


1

PythonQL एक एम्बेडेड वाक्य रचना कि IMHO एसक्यूएल पर एक सुधार है प्रदान करता है, मुख्यतः क्योंकि group, window, where, let, आदि स्वतंत्र रूप से intermixed जा सकता है।

$ cat x.py
#coding: pythonql
data = [{"x": 2, "y": 0}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]
q = [x match {'x': as x, 'y': as y} in data where y > 0]
print(sum(q))
print(list(q))

q = [x match {'x': as x, 'y': as y} as d in data where d['y'] > 0]
print(sum(q))

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

$ python x.py
7
[3, 4]
7

0

आप उपयोग कर सकते हैं linq.js

यह ऑब्जेक्ट के डेटा सेट से अन्य संरचनाओं के डेटा के रूप में एकत्रीकरण और चयन का उपयोग करने की अनुमति देता है।

var data = [{ x: 2, y: 0 }, { x: 3, y: 1 }, { x: 4, y: 1 }];

// SUM(X) WHERE Y > 0     -> 7
console.log(Enumerable.From(data).Where("$.y > 0").Sum("$.x"));

// LIST(X) WHERE Y > 0    -> [3, 4]
console.log(Enumerable.From(data).Where("$.y > 0").Select("$.x").ToArray());
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.