MSSQL Datasını Json Formatına Çevirme

MSSQL Datasını Json Formatına Çevirme

Yeniden Merhabalar,

Uzun bir aradan sonra yeniden bir yazı ile karşınızdayım. Not defteri arşivime yavaş yavaş eklemeler yapıyorum. İstek görüş ve önerilerinizi yorum ile iletebilirsiniz. Bu Makalede Datayı Json formatına çevirmeyi anlatacağım. Aslında pek anlatılacak bir yanı yok bende stackoverflow üzerinden bulmuştum. Hazır fonksiyonu veritabanınıza ekliyorsunuz sonrasında ise kodlar sihrini göstermeye başlıyor 🙂

Öncelikle Json formatı almak istediğimiz veritabanında yeni bir sorgu penceresi açıp aşağıda ki kodları yapıştırıp çalıştırıyoruz.

/****** Object:  UserDefinedFunction [dbo].[udf-Str-JSON]    Script Date: 2.06.2020 16:17:45 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[udf-Str-JSON] (@IncludeHead int,@ToLowerCase int,@XML xml)
Returns varchar(max)
AS
Begin
    Declare @Head varchar(max) = '',@JSON varchar(max) = ''
    ; with cteEAV as (Select RowNr=Row_Number() over (Order By (Select NULL))
                            ,Entity    = xRow.value('@*[1]','varchar(100)')
                            ,Attribute = xAtt.value('local-name(.)','varchar(100)')
                            ,Value     = xAtt.value('.','varchar(max)') 
                       From  @XML.nodes('/row') As R(xRow) 
                       Cross Apply R.xRow.nodes('./@*') As A(xAtt) )
          ,cteSum as (Select Records=count(Distinct Entity)
                            ,Head = IIF(@IncludeHead=0,IIF(count(Distinct Entity)<=1,'[getResults]','[[getResults]]'),Concat('{"status":{"successful":"true","timestamp":"',Format(GetUTCDate(),'yyyy-MM-dd hh:mm:ss '),'GMT','","rows":"',count(Distinct Entity),'"},"results":[[getResults]]}') ) 
                       From  cteEAV)
          ,cteBld as (Select *
                            ,NewRow=IIF(Lag(Entity,1)  over (Partition By Entity Order By (Select NULL))=Entity,'',',{')
                            ,EndRow=IIF(Lead(Entity,1) over (Partition By Entity Order By (Select NULL))=Entity,',','}')
                            ,JSON=Concat('"',IIF(@ToLowerCase=1,Lower(Attribute),Attribute),'":','"',Value,'"') 
                       From  cteEAV )
    Select @JSON = @JSON+NewRow+JSON+EndRow,@Head = Head From cteBld, cteSum
    Return Replace(@Head,'[getResults]',Stuff(@JSON,1,1,''))
End
-- Parameter 1: @IncludeHead 1/0
-- Parameter 2: @ToLowerCase 1/0 (converts field name to lowercase
-- Parameter 3: (Select * From ... for XML RAW)
GO

Kullanımı Aslında çok kolay. İlk Parametre olarak Başlığın yüklenip yüklenmeyeceğini soruyor buraya 1 veya 0 yani Var veya yok değeri giriyoruz, sonrasında sütun isimlerini olduğu gibi mi yazayım yoksa hepsini küçük harfe mi çevireyim diye soruyor onun içinde aynı mantık ile 1 veya 0 yazıyoruz ve işin temeli bir tablo veriyoruz buraya, Fakat tablonun sonuna “for XML RAW” yazıyoruz ve bunu bir XML olarak kabul edip Json formatına çeviriyor. Örnek Kullanımı Aşağıda sizin ile paylaştım kendiniz de evinizde rahatlıkla deneyebilirsiniz. Kolay Gelsin.

SELECT Ogrenciler.*, [dbo].[udf-Str-JSON] (0,0, (SELECT * FROM OgrencilerinAldigiDersler WHERE OgrencilerinAldigiDersler.OgrenciID = Ogrenciler.ID FOR XML RAW)) FROM Ogrenciler

Klasik bir öğrenci örneği ile de yazıyı sonlandırıyorum. 🙂

Paylaş :

Bu gönderiyi paylaş

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.