यदि आप किसी JSON दस्तावेज़ से मान निकालने का प्रयास कर रहे हैं, लेकिन समान स्तर पर एक या अधिक मानों में डुप्लिकेट कुंजियाँ हैं, तो यदि आप JSON_QUERY() या JSON_VALUE() ।
वे दोनों कार्य केवल पथ से मेल खाने वाले पहले मान को वापस कर देंगे।
सौभाग्य से, एक और विकल्प है।
OPENJSON() फ़ंक्शन समान स्तर पर किसी भी डुप्लिकेट कुंजी से सभी मान लौटाएगा।
उदाहरण
यहां OPENJSON() प्रदर्शित करने के लिए एक उदाहरण दिया गया है समान स्तर पर डुप्लिकेट गुण लौटाना।
DECLARE @json NVARCHAR(4000) =N'{ "dog" :{ "details" :{ "name" :"Fetch", "name" :"Good Dog", "sex" :"male" " } } }'; चुनें * OPENJSON से(@json, '$.dog.details'); परिणाम:
+----------+----------+----------+| कुंजी | मूल्य | टाइप करें ||----------+----------+----------|| नाम | फ़ेच | 1 || नाम | अच्छा कुत्ता | 1 || सेक्स | पुरुष | 1 |+----------+----------+----------+
यह उदाहरण $.dog.details . के सभी बच्चों को लौटाता है कुंजी।
इस मामले में, हमारे पास समान स्तर पर समान नाम वाली दो कुंजियाँ हैं (name कुंजी)।
अगर हम दो name . से केवल मान वापस करना चाहते हैं कुंजियाँ, हम निम्न की तरह कुछ कर सकते हैं।
DECLARE @json NVARCHAR(4000) =N'{ "dog" :{ "details" :{ "name" :"Fetch", "name" :"Good Dog", "sex" :"male" " } } }'; OPENJSON(@json, '$.dog.details') से मान चुनें जहां [कुंजी] ='नाम'; परिणाम:
+----------+| मान ||----------|| फ़ेच || अच्छा कुत्ता |+----------+
JSON_VALUE() &JSON_QUERY ()
जैसा कि बताया गया है, दोनों JSON_VALUE() और JSON_QUERY() पथ से मेल खाने वाला केवल पहला मान लौटाएं।
इसलिए यदि हम उपरोक्त JSON दस्तावेज़ के विरुद्ध उनका उपयोग करने का प्रयास करते हैं, तो हमें निम्नलिखित परिणाम मिलते हैं।
JSON_VALUE()
JSON_VALUE() JSON स्ट्रिंग से एक अदिश मान लौटाता है, इसलिए यह निम्न परिणाम लौटाएगा।
DECLARE @json NVARCHAR(4000) =N'{ "dog" :{ "details" :{ "name" :"Fetch", "name" :"Good Dog", "sex" :"male" " } } }'; चुनें JSON_VALUE(@json, '$.dog.details.name') AS [JSON_VALUE]; परिणाम:
+--------------+| JSON_VALUE ||--------------|| फ़ेच |+--------------+
JSON_QUERY()
JSON_QUERY() JSON स्ट्रिंग से किसी ऑब्जेक्ट या सरणी को निकालता है, इसलिए यह निम्न परिणाम लौटाएगा।
DECLARE @json NVARCHAR(4000) =N'{ "dog" :{ "details" :{ "name" :"Fetch", "name" :"Good Dog", "sex" :"male" " } } }'; चुनें JSON_QUERY(@json, '$.dog.details') AS [JSON_QUERY]; परिणाम:
+--------------+| JSON_QUERY ||--------------|| { "नाम" :"लाओ", "नाम" :"अच्छा कुत्ता", "सेक्स" :"पुरुष" --------------
कम से कम JSON_QUERY() . के साथ हमें डुप्लीकेट कुंजियाँ देखने को मिलती हैं, लेकिन हमें उनके अलग-अलग मान नहीं मिलते जैसे हमें OPENJSON() के साथ मिलते हैं ।