Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

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.

SQL Server 2016 - Native JSON

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.
SQL Server 2016 - Native JSON

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

SQL Server 2016 - Native JSON
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.
SQL Server 2016 - Native JSON
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.

SQL Server 2016 - Native JSON SQL Server 2016 - Native JSON
Sorgu penceresine sağ tıklayarak Query Options sekmesine tıklıyoruz. Ardından açılan pencerenin sol menüsünden “Results” -> “Text” kategorisine geliyoruz. Buradaki “Include column headers in the result set” özelliğinin onayını kaldırıyoruz. Bu özellik sorgu sonuçlarına bir kolon başlığı tanımlamaktan sorumludur. Haliyle bu şekilde bu işlevi pasif hale getirmiş oluyoruz.

Hazır görüntüsü elimizdeyken değinmeden geçmek istemediğim bir diğer özellik ise sağ altta işaretlemiş olduğum “Maximum number of characters displayed in each column” özelliğidir ki, sorgu sonucunda gelecek olan verinin kaç karakterden ibaret olacağını tutmaktadır. Varsayılan olarak 256 değerine sahip olan bu özellik, maksimum 8192 değerine kadar ayarlanabilmektedir.

SQL Server 2016 - Native JSON

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.

SQL Server 2016 - Native JSON

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.
SQL Server 2016 - Native JSON
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.
SQL Server 2016 - Native JSON

İş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…

Bunlar da hoşunuza gidebilir...

4 Cevaplar

  1. sinebol dedi ki:

    Çok güzel yazılar paylaşıyorsunuz. Sonsuz teşekkürlerimi sunarım.

  1. 13 Kasım 2016

    […] gelen yeniliklere değinmenin heyecanını yaşamaktayız. Özellikle bir önceki yazımız olan SQL Server 2016 – Native JSON başlıklı içeriğimizde ki yapısal yenilikten sonra bir dizi fonksiyonellikten […]

  2. 01 Aralık 2016

    […] Server 2016 versiyonunun önemli getirisi olan Native JSON özelliğinin JSON işlevsel fonksiyon uzantılarından bir yenisi daha JSON_VALUE fonksiyonudur. […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*