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

संचालिका

SQLite में, ->> ऑपरेटर JSON दस्तावेज़ से एक उप-घटक निकालता है और उस उप-घटक का SQL प्रतिनिधित्व देता है।

->> ऑपरेटर को पहली बार SQLite संस्करण 3.38.0 (22 फरवरी 2022 को जारी) में पेश किया गया था।

सिंटैक्स

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

json ->> path

जहां json JSON दस्तावेज़ है और path उपघटक का पथ है जिसे हम इससे निकालना चाहते हैं।

इसलिए हम ऑपरेटर के बाईं ओर एक JSON दस्तावेज़ प्रदान करते हैं, और हम उस पथ को निर्दिष्ट करते हैं जिसे हम इसके दाईं ओर निकालना चाहते हैं।

->> ऑपरेटर हमेशा निर्दिष्ट उप-घटक का SQL प्रतिनिधित्व देता है। JSON प्रतिनिधित्व वापस करने के लिए, -> . का उपयोग करें इसके बजाय ऑपरेटर।

उदाहरण

यह प्रदर्शित करने के लिए एक सरल उदाहरण है कि ->> . कैसे ऑपरेटर काम करता है:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$';

परिणाम:

{"name":"Wag","type":"Dog"}

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

आइए एक और पथ निर्दिष्ट करें:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type';

परिणाम:

Dog

हम डॉलर के चिह्न और पूर्ण विराम को भी इस तरह से पूरी तरह से हटा सकते हैं:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'type';

परिणाम:

Dog

यहाँ यह एक बड़े JSON दस्तावेज़ के साथ है:

SELECT '[
        { 
        "user" : "Spike",
        "age" : 30,
        "scores" : [ 9, 7, 3 ]
        },
        { 
        "user" : "Faye",
        "age" : 25,
        "scores" : [ 90, 87, 93 ]
        },
        { 
        "user" : "Jet",
        "age" : 40,
        "scores" : [ 50, 38, 67 ]
        }
        ]' ->> '$[0]';

परिणाम:

{"user":"Spike","age":30,"scores":[9,7,3]}

SQLite में, सरणियाँ शून्य आधारित होती हैं, और इसलिए निर्दिष्ट करती हैं [0] पहला सरणी तत्व देता है।

यदि हम केवल उस उपयोगकर्ता के स्कोर प्राप्त करना चाहते हैं, तो हम ऐसा कर सकते हैं:

SELECT '[
        { 
        "user" : "Spike",
        "age" : 30,
        "scores" : [ 9, 7, 3 ]
        },
        { 
        "user" : "Faye",
        "age" : 25,
        "scores" : [ 90, 87, 93 ]
        },
        { 
        "user" : "Jet",
        "age" : 40,
        "scores" : [ 50, 38, 67 ]
        }
        ]' ->> '$[0].scores';

परिणाम:

[9,7,3]

हम और भी गहराई तक जा सकते हैं और एक विशिष्ट स्कोर निकाल सकते हैं:

SELECT '[
        { 
        "user" : "Spike",
        "age" : 30,
        "scores" : [ 9, 7, 3 ]
        },
        { 
        "user" : "Faye",
        "age" : 25,
        "scores" : [ 90, 87, 93 ]
        },
        { 
        "user" : "Jet",
        "age" : 40,
        "scores" : [ 50, 38, 67 ]
        }
        ]' ->> '$[0].scores[1]';

परिणाम:

7

गैर-मौजूद पथ

यदि पथ JSON में मौजूद नहीं है, तो एक शून्य मान वापस आ जाता है:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.age';

परिणाम:

null

ध्यान दें कि SQLite में, आप .nullvalue . का उपयोग कर सकते हैं जब भी कोई शून्य मान लौटाया जाता है तो आउटपुट के लिए एक स्ट्रिंग निर्दिष्ट करने के लिए। मेरे मामले में, मैंने पहले निम्न आदेश चलाया था:

.nullvalue null

यह निर्दिष्ट करता है कि टेक्स्ट null जब भी कोई शून्य मान लौटाया जाता है तो आउटपुट होना चाहिए। यही कारण है कि उपरोक्त उदाहरण टेक्स्ट को आउटपुट करता है null . अगर मैंने ऐसा नहीं किया होता, तो परिणाम शायद खाली होता।

अमान्य JSON

यदि पहला तर्क मान्य JSON नहीं है, तो एक त्रुटि उत्पन्न होती है:

SELECT '{ "name" }' ->> '$';

परिणाम:

Runtime error: malformed JSON

अमान्य पथ

और यदि दूसरा तर्क मान्य पथ नहीं है, तो एक त्रुटि उत्पन्न होती है:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$name';

परिणाम:

Runtime error: JSON path error near 'name'

इस मामले में, मैं पूर्ण विराम शामिल करना भूल गया (. ) डॉलर चिह्न के बीच ($ ) और name

हालांकि जैसा कि उल्लेख किया गया है, डॉलर के चिह्न और पूर्ण विराम को पूरी तरह से छोड़ना संभव है:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'name';

परिणाम:

Wag

  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 पर तर्क को बाध्य नहीं कर सकता क्योंकि अनुक्रमणिका सीमा से बाहर है

  2. SQLiteAssetHelper के साथ संस्करण संख्या में + का उपयोग करने से कैसे बचें?

  3. पायथन, SQLite और SQLAlchemy के साथ डेटा प्रबंधन

  4. Android में SQLiteOpenHelper के साथ संलग्न sqlite डेटाबेस

  5. SQLite डेटाबेस का बैकअप लें