SQL सर्वर में आप FOR JSON
. का उपयोग कर सकते हैं परिणामों को JSON के रूप में प्रारूपित करने के लिए एक क्वेरी में क्लॉज। ऐसा करते समय, आपको AUTO
. में से किसी एक को चुनना होगा या PATH
विकल्प। इस लेख में AUTO
. का उपयोग करने के उदाहरण हैं विकल्प।
सिंटैक्स
वाक्य रचना इस प्रकार है:
SELECT ... (your query goes here) FOR JSON AUTO;
तो मूल रूप से, आपको बस इतना करना है कि FOR JSON AUTO
. जोड़ें आपकी क्वेरी के अंत तक।
उदाहरण 1 - मूल उपयोग
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
USE Music; SELECT TOP 3 AlbumName, ReleaseDate FROM Albums FOR JSON AUTO;
परिणाम:
[ { "AlbumName": "Powerslave", "ReleaseDate": "1984-09-03" }, { "AlbumName": "Powerage", "ReleaseDate": "1978-05-05" }, { "AlbumName": "Singing Down the Lane", "ReleaseDate": "1956-01-01" } ]
तो परिणाम पंक्तियों और स्तंभों के बजाय एक अच्छी तरह से स्वरूपित JSON दस्तावेज़ के रूप में सामने आते हैं।
इस मामले में मैंने TOP 3
. का इस्तेमाल किया परिणाम को केवल तीन परिणामों तक सीमित करने के लिए।
एकल पंक्ति परिणाम?
आपके परिणाम शुरू में एक ही पंक्ति और एक कॉलम में और इस तरह एक लंबी लाइन के रूप में दिखाई दे सकते हैं:
यदि ऐसा है, तो परिणाम सेट पर क्लिक करने का प्रयास करें। आपके डेटाबेस प्रबंधन सॉफ़्टवेयर के आधार पर, इसे JSON दस्तावेज़ लॉन्च करना चाहिए जैसा कि यह ऊपर के उदाहरण में दिखाई देता है।
क्या यह ठीक वैसे ही काम करता है जैसा कि वर्णित है, यह उस सॉफ़्टवेयर पर निर्भर करेगा जिसका उपयोग आप SQL सर्वर को क्वेरी करने के लिए करते हैं।
लिखने के समय, SQL ऑपरेशंस स्टूडियो का उपयोग करते समय इसने मेरे लिए ठीक काम किया (जिसका नाम बदलकर Azure डेटा स्टूडियो कर दिया गया)। वीएस कोड में एमएसएसक्यूएल एक्सटेंशन का उपयोग करते समय भी यह ठीक काम करता था। SSMS हालांकि, परिणामों को केवल एक लंबी लाइन के रूप में स्वरूपित करता है (हालाँकि अभी भी JSON प्रारूप में है)।
कमांड लाइन टूल्स का उपयोग करके मुझे सफलता की अलग-अलग डिग्री भी मिलीं।
आप यह भी देख सकते हैं कि परिणाम सेट कितना बड़ा है, इस पर निर्भर करते हुए, परिणाम शुरू में कई पंक्तियों में वितरित किए जाते हैं।
यदि आप संतोषजनक तरीके से परिणाम प्रदर्शित करने के लिए इसे प्राप्त नहीं कर सकते हैं, तो एक अलग टूल आज़माएं।
उदाहरण 2 - एकाधिक तालिकाओं में क्वेरी
इस उदाहरण में, मैं उन दो तालिकाओं को क्वेरी करता हूं जिनके बीच एक-से-अनेक संबंध हैं। इस मामले में, प्रत्येक कलाकार के पास कई एल्बम हो सकते हैं।
USE Music; SELECT ArtistName, AlbumName FROM Artists INNER JOIN Albums ON Artists.ArtistId = Albums.ArtistId ORDER BY ArtistName FOR JSON AUTO;
परिणाम:
[ { "ArtistName": "AC/DC", "Albums": [ { "AlbumName": "Powerage" } ] }, { "ArtistName": "Allan Holdsworth", "Albums": [ { "AlbumName": "All Night Wrong" }, { "AlbumName": "The Sixteen Men of Tain" } ] }, { "ArtistName": "Buddy Rich", "Albums": [ { "AlbumName": "Big Swing Face" } ] }, { "ArtistName": "Devin Townsend", "Albums": [ { "AlbumName": "Ziltoid the Omniscient" }, { "AlbumName": "Casualties of Cool" }, { "AlbumName": "Epicloud" } ] }, { "ArtistName": "Iron Maiden", "Albums": [ { "AlbumName": "Powerslave" }, { "AlbumName": "Somewhere in Time" }, { "AlbumName": "Piece of Mind" }, { "AlbumName": "Killers" }, { "AlbumName": "No Prayer for the Dying" } ] }, { "ArtistName": "Jim Reeves", "Albums": [ { "AlbumName": "Singing Down the Lane" } ] }, { "ArtistName": "Michael Learns to Rock", "Albums": [ { "AlbumName": "Blue Night" }, { "AlbumName": "Eternity" }, { "AlbumName": "Scandinavia" } ] }, { "ArtistName": "The Script", "Albums": [ { "AlbumName": "No Sound Without Silence" } ] }, { "ArtistName": "Tom Jones", "Albums": [ { "AlbumName": "Long Lost Suitcase" }, { "AlbumName": "Praise and Blame" }, { "AlbumName": "Along Came Jones" } ] } ]
जैसा कि आप देख सकते हैं, प्रत्येक एल्बम को "एल्बम" के अंतर्गत नेस्ट किया गया है। ऐसा इसलिए है क्योंकि AUTO
विकल्प SELECT
. में कॉलम के क्रम के आधार पर आउटपुट निर्धारित करता है सूची और उनकी स्रोत तालिकाएँ।
उदाहरण 3 - एक रूट नोड जोड़ें
आप ROOT()
. का उपयोग कर सकते हैं आउटपुट में रूट नोड जोड़ने का विकल्प। यह आउटपुट में एकल, शीर्ष-स्तरीय तत्व जोड़ता है। ऐसा करने के लिए, बस ROOT()
जोड़ें क्वेरी के अंत में विकल्प, उस नाम के साथ जिसे आप रूट नोड रखना चाहते हैं।
इसलिए हम पिछले उदाहरण को इसमें संशोधित कर सकते हैं:
USE Music; SELECT TOP 3 ArtistName, AlbumName FROM Artists INNER JOIN Albums ON Artists.ArtistId = Albums.ArtistId ORDER BY ArtistName FOR JSON AUTO, ROOT('Music');
परिणाम:
{ "Music": [ { "ArtistName": "AC/DC", "Albums": [ { "AlbumName": "Powerage" } ] }, { "ArtistName": "Allan Holdsworth", "Albums": [ { "AlbumName": "All Night Wrong" }, { "AlbumName": "The Sixteen Men of Tain" } ] } ] }
मैंने TOP 3
. जोड़कर परिणाम सेट को केवल तीन परिणामों तक सीमित कर दिया है क्वेरी के लिए।
उदाहरण 4 - ऐरे रैपर को हटा दें
आप WITHOUT_ARRAY_WRAPPER
. का उपयोग कर सकते हैं परिणामों के चारों ओर वर्गाकार कोष्ठक हटाने का विकल्प।
उदाहरण:
USE Music; SELECT TOP 1 AlbumName, ReleaseDate FROM Albums FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER;
परिणाम:
{ "AlbumName": "Powerslave", "ReleaseDate": "1984-09-03" }
ध्यान दें कि यदि आप इसे एकाधिक पंक्ति परिणाम पर करते हैं, तो आप अमान्य JSON के साथ समाप्त हो जाएंगे।