SQL Server 2016 – Native JSON
Merhaba,
SQL Server 2016 tıpkı XML desteğinde olduğu gibi günümüz popüler veri formatı olan JSON yapısınada Native JSON yeniliği ile eşlik edebilmektedir. Artık sorgu sonuçlarımızı JSON formatında elde edebilir yahut JSON formatındaki veri kümeleri üzerinde sorgulamalar gerçekleştirebilmekteyiz.
Neden SQL Server tarafından JSON veri formatının göz önüne alındığını sorarsanız eğer, XML’e göre daha okunaklı ve hız, boyut ve performans açısından daha maliyetli olması en önemli faktörlerdir diyebilirim. Ayriyetten günümüzde bir çok veritabanı yönetim sistemi ile NoSQL yapısının tercih ettiği veri formatı olmasıda SQL Server için JSON formatını olmazsa olmaz kılmıştır.
Hazır konusu açılmışken şöyle bir JSON formatına göz atmakta fayda var;
{
Deger1: 'a',
Deger2: 'b',
Deger3: 3,
Deger4: 2.19,
Deger5: true
}
Görüldüğü şekilde bir formata sahiptir. Her bir değer aslında bir node edasıyla çalışmaktadır. Ayriyetten aşağıdaki gibi dizi şeklinde verisel yapılarıda desteklemektedir.
{
Deger1: 'a',
Deger2: 'b',
Deger3: 3,
Deger4: 2.19,
Deger5: true,
Deger6:
[
{
Deger7: 'a',
Deger8: 'b',
Deger9: 10
},
{
Deger7: 'a1',
Deger8: 'b1',
Deger9: 11
},
{
Deger7: 'a2',
Deger8: 'b2',
Deger9: 12
}
]
}
SQL Server 2016 ile gelen Native JSON özelliği ile artık sorgu sonuçlarımızı bu formatta alabilecek yahut bu formatta bir veri kümesi üzerinde sorgulama gerçekleştirebileceğiz.
Eğer sorgu neticesini JSON veri formatında almak istiyorsak yapmamız gereken FOR JSON AUTO veya FOR JSON PATH keywordlerini sorgumuzun sonuna eklemektir.
SELECT * FROM TABLO FOR JSON AUTO - PATH
Peki bu ikisi arasında nasıl bir fark vardır? diye sorabilirsiniz. Şimdi gelin bu iki farkı gözeterek sorgularımızı JSON formatında elde edelim.
“For JSON Auto” Komutunun Kullanımı
For JSON Auto komutu, sorgunun sonucunu direkt olarak JSON formatına çevirecektir.
Yukarıdaki ekran görüntüsünden de gördüğünüz gibi For JSON Auto komutu sayesinde ilgili sorgumuzu JSON formatına getirmiş bulunmaktayız. Lakin elde edilen sonucun bu şekilde Grid içerisinde gösterilmesi okunabilirliği oldukça zayıflatmaktadır. Bu yüzden sorgu sonucunu aşağıdaki gibi Text olarak almanızı tavsiye ederim.

Görüldüğü üzere “Results to Text” düğmesine basarak sorgu sonucunu text şeklinde daha okunabilir bir kıvamda elde etmekteyiz.

Ya da yukarıda olduğu gibi sorgu ekranına sağ tıklayarak “Results to” -> “Results to Text” kombinasyonuylada sonuçları text olarak talep edebiliriz.
Bunların dışında sorgu sonucunda gelen JSON formatındaki çıktımıza bir daha göz atalım.

Görüldüğü üzere gelen çıktıda “Kolon Başlığı” ve “Etkilenen Eleman Sayısı” bilgileri mevcut. Bu bilgileri sorgu sonucumuzda istemeyebiliriz. O halde öncelikle kolon başlığını kaldırmaktan başlayalım.
Evet… Görüldüğü üzere kolon başlığı kaldırılmıştır. Sıra etkilenen eleman sayısı bilgisini kaldırmakta. Bu işlem için SET NOCOUNT komutunu kullanacağız.
Bu kadar basit…
For JSON Auto komutu ile sorgumuzun sonucunu JSON formatında nasıl aldığımızı ve bu işlemi yaparken gerek görülebilecek diğer bazı teferruat işlemlerinin nasıl yapıldığını incelemiş olduk.
Şimdi sırada For JSON Path komutunun kullanımı vardır.
“For JSON Path” Komutunun Kullanımı
For JSON Auto komutu ile sorgumuzun sonucunu direkt olarak JSON formatında, hiç bir ek işlem yapmaksızın statik bir vaziyette, değişmeyen bir şekilde işte neyse o haliyle elde ediyorduk 🙂
For JSON Path komutu ile de sorgumuzun sonucunu JSON formatında elde etmenin yanında sonucumuzu istediğimiz bir formata büründürebilmekteyiz. Yani gelen sonucun key/value yapılanmasına müdahale ederek farklı bir format oluşturmamıza, bir başka deyişle alt bir node oluşturmamıza yardımcı olabilmektedir.
Şimdi aşağıdaki ekran görüntüsünü inceleyiniz.

Gördüğünüz gibi For JSON Path komutu For JSON Auto komutunun yaptığı işlemin aynısını yapmış bulunmaktadır.
Şimdi ise aşağıdaki ekran görüntüsünü inceleyiniz.

İşte birde bu şekilde For JSON Auto komutunda olmayan, çıktıyı özelleştirme imkanı sunmaktadır. Dikkat ederseniz, kolonlara sunulan alias değerinde özel bir formatlama oluşturulmuştur. “[Name].[Key]” formatı sayesinde [Name] kısmında oluşturulacak paketin genel adı, [Key] kısmında ise paket içine yerleştirilecek alan adları oluşturulmaktadır.
Yani uzun lafın kısası For JSON Path komutu sayesinde sorgu sonuçlarımızı esnetilmiş ve özelleştirilmiş JSON verisi olarak elde edebiliyoruz.
Nihayetinde SQL Server 2016 Native JSON özelliği daha hızlı ve pratik bir şekilde JSON verileriyle çalışmamızı sağlamakta ve yapısal işlemlerimize hız kazandırmaktadır. Web platformunda bu yeniliğini etkisini düşünürsek eğer oldukça kârlı bir getirisi olduğunu söyleyebiliriz.
Sonraki yazılarımızda Native JSON yeniliğinin getirisi olan bazı fonksiyon ve türevleri üzerine konuşuyor olacağız…
Görüşmek üzere…
İyi çalışmalar…






Çok güzel yazılar paylaşıyorsunuz. Sonsuz teşekkürlerimi sunarım.
Nezaketiniz için ben teşekkür ederim…
Yine beklerim…