SQLite
 sql >> डेटाबेस >  >> RDS >> SQLite

SQLite JSON_EXTRACT ()

SQLite में, json_extract() फ़ंक्शन अच्छी तरह से बनाए गए JSON से एक या अधिक मान निकालता है और लौटाता है।

जब हम फ़ंक्शन को कॉल करते हैं, तो हम JSON को एक तर्क के रूप में पास करते हैं, और यह लागू मान/एस देता है।

हम JSON दस्तावेज़ से निकालने के लिए एक या अधिक पथ निर्दिष्ट कर सकते हैं।

सिंटैक्स

वाक्य रचना इस प्रकार है:

json_extract(X,P1,P2,...)

जहां X JSON दस्तावेज़ का प्रतिनिधित्व करता है, और P1,P2,... वे पथ हैं जिनका उपयोग हम JSON दस्तावेज़ के विशिष्ट भागों को निकालने के लिए कर सकते हैं।

उदाहरण

प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है:

SELECT json_extract('{ "a" : 1 }', '$');

परिणाम:

{"a":1}

यहां, मैंने $ . का पथ निर्दिष्ट किया है , जो संपूर्ण JSON दस्तावेज़ लौटाता है।

यहां एक बड़े JSON दस्तावेज़ के साथ एक उदाहरण दिया गया है:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$'
);

परिणाम:

{"dogs":[{"name":"Wag","scores":[7,9]},{"name":"Bark","scores":[3,4,8,7]},{"name":"Woof","scores":[3,2,1]}]}

आइए पथ बदलें ताकि हम केवल dogs . को वापस कर दें सरणी:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs'
);

परिणाम:

[{"name":"Wag","scores":[7,9]},{"name":"Bark","scores":[3,4,8,7]},{"name":"Woof","scores":[3,2,1]}]

आइए सरणी के भीतर किसी एक तत्व का चयन करें:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[1]'
);

परिणाम:

{"name":"Bark","scores":[3,4,8,7]}

सरणी शून्य आधारित हैं, और इसलिए गिनती 0 . से शुरू होती है . इसलिए, हमने [1] . निर्दिष्ट किया है dogs . के भीतर दूसरा तत्व प्राप्त करने के लिए सरणी, जो एक JSON ऑब्जेक्ट होता है।

आइए फिर से गहराई में जाएं, और सरणी में उस स्थिति में केवल कुत्ते का नाम लौटाएं:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[1].name'
);

परिणाम:

Bark

एकाधिक पथ निर्दिष्ट करें

json_extract() फ़ंक्शन हमें कई पथ चुनने की अनुमति देता है:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[0].name',
'$.dogs[1].name',
'$.dogs[2].name'
);

परिणाम:

["Wag","Bark","Woof"]

इस मामले में, मैंने dogs . में सभी कुत्तों के नाम वापस कर दिए सरणी।

सभी कुत्तों के नाम एक सरणी में लौटाए जाते हैं।

एक गैर-मौजूद पथ का चयन करना

अगर हम किसी ऐसे पथ की ओर इशारा करते हैं जो मौजूद नहीं है, null लौटा दिया गया है।

सबसे पहले, .nullvalue सेट करते हैं करने के लिए NULL :

.nullvalue NULL

.nullvalue डॉट कमांड हमें एक स्ट्रिंग प्रदान करने की अनुमति देता है जिसका उपयोग शून्य मानों को बदलने के लिए किया जाएगा। यह कई तरीकों में से एक है जिससे आप SQLite में एक स्ट्रिंग के साथ अशक्त मानों को बदल सकते हैं। इस मामले में, मैंने इसे NULL . पर सेट किया है . अब, कोई भी शून्य मान NULL लौटाएगा रिक्त परिणाम के बजाय।

अब json_extract() पर कॉल करते हैं , लेकिन एक दूसरे तर्क का उपयोग करें जो एक गैर-मौजूद पथ की ओर इशारा करता है:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.cats'
);

परिणाम:

NULL

अमान्य पथ

यदि हमारा पथ ठीक से नहीं बना है तो हमें एक त्रुटि मिलेगी:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'dogs'
);

परिणाम:

Runtime error: JSON path error near 'dogs'

इस मामले में, मैं $. . शामिल करना भूल गया रास्ते के सामने।

अमान्य JSON दस्तावेज़

हमें एक त्रुटि भी मिलेगी जो JSON अच्छी तरह से गठित नहीं है:

SELECT json_extract('{ "Dogs" : }', 
'$'
);

परिणाम:

Runtime error: malformed JSON

इस बार त्रुटि हमें बताती है कि हमारा JSON विकृत है।

वापसी के प्रकार

SQLite दस्तावेज़ निम्नलिखित बताता है:

<ब्लॉकक्वॉट क्लास ="डब्ल्यूपी-ब्लॉक-कोट">

यदि केवल एक पथ P1 प्रदान किया जाता है, तो परिणाम का SQL डेटाटाइप JSON नल के लिए NULL है, JSON संख्यात्मक मान के लिए INTEGER या REAL, JSON गलत मान के लिए एक INTEGER शून्य, JSON वास्तविक मान के लिए एक INTEGER एक है, JSON स्ट्रिंग मान के लिए dequoted टेक्स्ट, और JSON ऑब्जेक्ट और सरणी मानों के लिए टेक्स्ट प्रतिनिधित्व। यदि कई पथ तर्क हैं (P1, P2, और आगे) तो यह दिनचर्या SQLite पाठ लौटाती है जो विभिन्न मानों को धारण करने वाला एक अच्छी तरह से गठित JSON सरणी है।

MySQL संगतता

SQLite दस्तावेज़ हमें json_extract() के SQLite और MySQL कार्यान्वयनों के बीच एक सूक्ष्म असंगति के बारे में भी चेतावनी देता है। समारोह।

विशेष रूप से, यह बताता है:

<ब्लॉकक्वॉट क्लास ="डब्ल्यूपी-ब्लॉक-कोट">

Json_extract() का MySQL संस्करण हमेशा JSON देता है। Json_extract() का SQLite संस्करण केवल JSON देता है यदि दो या अधिक PATH तर्क हैं (क्योंकि परिणाम तब JSON सरणी है) या यदि एकल PATH तर्क किसी सरणी या ऑब्जेक्ट का संदर्भ देता है। SQLite में, यदि json_extract() में केवल एक PATH तर्क है और वह PATH JSON नल या एक स्ट्रिंग या एक संख्यात्मक मान को संदर्भित करता है, तो json_extract() संबंधित SQL NULL, TEXT, INTEGER, या REAL मान देता है।

मूल रूप से, यह अंतर केवल JSON के भीतर अलग-अलग मानों तक पहुँचने पर स्पष्ट हो जाता है जो स्ट्रिंग्स या NULLs हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मुझे कर्सर और डीबी कब बंद करना चाहिए?

  2. sqlite पंक्ति आईडी सूचीदृश्य से मेल नहीं खाती - ANDROID

  3. SQLite में एक कॉलम के लिए एक डिफ़ॉल्ट मान सेट करें:डिफ़ॉल्ट बाधा

  4. ऑफ़लाइन उपयोग के लिए पार्स किए गए JSON को कैश कैसे करें

  5. स्क्लाइट डेटाबेस में उनके नाम के अनुसार ड्रा करने योग्य से छवि कैसे प्राप्त करें और फिर इसे सूची दृश्य में प्रदर्शित करें