Microsoft SQL Server
OPENJSON
खोज…
कुंजी प्राप्त करें: JSON पाठ से मूल्य जोड़े
OPENJSON फ़ंक्शन JSON टेक्स्ट को पार्स करता है और JSON के पहले स्तर पर सभी प्रमुख: वैल्यू जोड़े देता है:
declare @json NVARCHAR(4000) = N'{"Name":"Joe","age":27,"skills":["C#","SQL"]}';
SELECT * FROM OPENJSON(@json);
चाभी | मूल्य | प्रकार |
---|---|---|
नाम | जो | 1 |
आयु | 27 | 2 |
कौशल | [ "सी #", "एसक्यूएल"] | 4 |
स्तंभ प्रकार मान के प्रकार का वर्णन करता है, अर्थात शून्य (0), स्ट्रिंग (1), संख्या (2), बूलियन (3), सरणी (4), और ऑब्जेक्ट (5)।
पंक्तियों के सेट में JSON सरणी रूपांतरण
OPENJSON फ़ंक्शन JSON ऑब्जेक्ट्स का संग्रह पार्स करता है और पंक्तियों के सेट के रूप में JSON टेक्स्ट से मान लौटाता है।
declare @json nvarchar(4000) = N'[
{"Number":"SO43659","Date":"2011-05-31T00:00:00","Customer": "MSFT","Price":59.99,"Quantity":1},
{"Number":"SO43661","Date":"2011-06-01T00:00:00","Customer":"Nokia","Price":24.99,"Quantity":3}
]'
SELECT *
FROM OPENJSON (@json)
WITH (
Number varchar(200),
Date datetime,
Customer varchar(200),
Quantity int
)
क्लॉज़ के साथ OPENJSON फ़ंक्शन का निर्दिष्ट रिटर्न स्कीमा है। JSON ऑब्जेक्ट्स में कुंजियाँ स्तंभ नामों से प्राप्त होती हैं। यदि JSON में कुछ कुंजी बिना क्लॉज के निर्दिष्ट नहीं है (जैसे इस उदाहरण में मूल्य) तो इसे अनदेखा कर दिया जाएगा। मान स्वचालित रूप से निर्दिष्ट प्रकारों में परिवर्तित हो जाते हैं।
संख्या | दिनांक | ग्राहक | मात्रा |
---|---|---|---|
SO43659 | 2011-05-31T00: 00: 00 | MSFT | 1 |
SO43661 | 2011-06-01T00: 00: 00 | नोकिया | 3 |
पंक्तियों के सेट में नेस्टेड JSON फ़ील्ड्स परिवर्तित करें
OPENJSON फ़ंक्शन JSON ऑब्जेक्ट्स का संग्रह पार्स करता है और पंक्तियों के सेट के रूप में JSON टेक्स्ट से मान लौटाता है। यदि इनपुट ऑब्जेक्ट के मानों को नेस्टेड किया जाता है, तो प्रत्येक कॉलम में अतिरिक्त मैपिंग पैरामीटर को क्लॉज के साथ निर्दिष्ट किया जा सकता है:
declare @json nvarchar(4000) = N'[
{"data":{"num":"SO43659","date":"2011-05-31T00:00:00"},"info":{"customer":"MSFT","Price":59.99,"qty":1}},
{"data":{"number":"SO43661","date":"2011-06-01T00:00:00"},"info":{"customer":"Nokia","Price":24.99,"qty":3}}
]'
SELECT *
FROM OPENJSON (@json)
WITH (
Number varchar(200) '$.data.num',
Date datetime '$.data.date',
Customer varchar(200) '$.info.customer',
Quantity int '$.info.qty',
)
क्लॉज़ के साथ OPENJSON फ़ंक्शन का निर्दिष्ट रिटर्न स्कीमा है। JSON नोड्स के प्रकार को निर्दिष्ट पथ के बाद जहाँ लौटाया गया मान मिलना चाहिए। JSON ऑब्जेक्ट्स में कीज़ को इन रास्तों से लाया जाता है। मान स्वचालित रूप से निर्दिष्ट प्रकारों में परिवर्तित हो जाते हैं।
संख्या | दिनांक | ग्राहक | मात्रा |
---|---|---|---|
SO43659 | 2011-05-31T00: 00: 00 | MSFT | 1 |
SO43661 | 2011-06-01T00: 00: 00 | नोकिया | 3 |
आंतरिक JSON उप-ऑब्जेक्ट निकाल रहा है
OPENJSON JSON टेक्स्ट के अंदर JSON ऑब्जेक्ट्स के टुकड़े निकाल सकता है। JSON उप-ऑब्जेक्ट के संदर्भ में स्तंभ परिभाषा में nvarchar (अधिकतम) और AS JSON विकल्प सेट करें:
declare @json nvarchar(4000) = N'[
{"Number":"SO43659","Date":"2011-05-31T00:00:00","info":{"customer":"MSFT","Price":59.99,"qty":1}},
{"Number":"SO43661","Date":"2011-06-01T00:00:00","info":{"customer":"Nokia","Price":24.99,"qty":3}}
]'
SELECT *
FROM OPENJSON (@json)
WITH (
Number varchar(200),
Date datetime,
Info nvarchar(max) '$.info' AS JSON
)
जानकारी कॉलम को "जानकारी" ऑब्जेक्ट पर मैप किया जाएगा। परिणाम होंगे:
संख्या | दिनांक | जानकारी |
---|---|---|
SO43659 | 2011-05-31T00: 00: 00 | { "ग्राहक": "MSFT", "मूल्य": 59.99, "मात्रा": 1} |
SO43661 | 2011-06-01T00: 00: 00 | { "ग्राहक": "नोकिया", "मूल्य": 24.99, "मात्रा": 3} |
नेस्टेड JSON उप-सरणियों के साथ काम करना
JSON में आंतरिक सरणियों के साथ जटिल संरचना हो सकती है। इस उदाहरण में, हमारे पास आदेशों की नेस्टेड उप सरणी के साथ क्रम के सरणी हैं।
declare @json nvarchar(4000) = N'[
{"Number":"SO43659","Date":"2011-05-31T00:00:00",
"Items":[{"Price":11.99,"Quantity":1},{"Price":12.99,"Quantity":5}]},
{"Number":"SO43661","Date":"2011-06-01T00:00:00",
"Items":[{"Price":21.99,"Quantity":3},{"Price":22.99,"Quantity":2},{"Price":23.99,"Quantity":2}]}
]'
हम OPENJSON का उपयोग करके रूट स्तर के गुणों को पार्स कर सकते हैं जो आइटम सरणी को JSON टुकड़ा के रूप में वापस कर देंगे। तब हम OPENJSON को फिर से आइटम सरणी पर लागू कर सकते हैं और आंतरिक JSON तालिका खोल सकते हैं। पहले लेवल टेबल और इनर टेबल को "जॉइन" किया जाएगा जैसे कि मानक टेबल के बीच जोइन में:
SELECT *
FROM
OPENJSON (@json)
WITH ( Number varchar(200), Date datetime,
Items nvarchar(max) AS JSON )
CROSS APPLY
OPENJSON (Items)
WITH ( Price float, Quantity int)
परिणाम:
संख्या | दिनांक | आइटम | कीमत | मात्रा |
---|---|---|---|---|
SO43659 | 2011-05-31 00: 00: 00.000 | [{ "मूल्य": 11.99, "मात्रा": 1}, { "मूल्य": 12.99, "मात्रा": 5}] | 11.99 | 1 |
SO43659 | 2011-05-31 00: 00: 00.000 | [{ "मूल्य": 11.99, "मात्रा": 1}, { "मूल्य": 12.99, "मात्रा": 5}] | 12.99 | 5 |
SO43661 | 2011-06-01 00: 00: 00.000 | [{ "मूल्य": 21.99, "मात्रा": 3}, { "मूल्य": 22.99, "मात्रा": 2}, { "मूल्य": 23.99, "मात्रा": 2}] | 21.99 | 3 |
SO43661 | 2011-06-01 00: 00: 00.000 | [{ "मूल्य": 21.99, "मात्रा": 3}, { "मूल्य": 22.99, "मात्रा": 2}, { "मूल्य": 23.99, "मात्रा": 2}] | 22.99 | 2 |
SO43661 | 2011-06-01 00: 00: 00.000 | [{ "मूल्य": 21.99, "मात्रा": 3}, { "मूल्य": 22.99, "मात्रा": 2}, { "मूल्य": 23.99, "मात्रा": 2}] | 23.99 | 2 |