(16-04-2019, Saat: 00:42)adelphiforumz Adlı Kullanıcıdan Alıntı: Selamlar
SQL 2016 ve üst sürümlerinde kullanabileceğiniz JSON formatındaki bir veriyi işlerken eğer array içinde array varsa çalıştırabileceğiniz bir yöntem
Detaylı örnekler için
https://docs.microsoft.com/en-us/sql/rel...erver-2017
JSON To Table
DECLARE @json NVARCHAR(MAX) = '{ "Ad" : "Ad 1", "Soyad" : "Soyad 1", "Adresler" : [{ "AdresTip" : "Merkez", "Ulke" : "TR", "Il" : "34", "Ilce" : "Kadıköy", "Telefonlar" : [{ "TelTip" : "Tel", "Numara": "34-12" }, { "TelTip" : "Fax", "Numara": "34-34" } ] }, { "AdresTip" : "Sube", "Ulke" : "TR", "Il" : "34", "Ilce" : "Şişli", "Telefonlar" : [{ "TelTip" : "Tel", "Numara": "34-56" }, { "TelTip" : "Fax", "Numara": "34-78" } ] } , { "AdresTip" : "Merkez", "Ulke" : "TR", "Il" : "35", "Ilce" : "Alsancak", "Telefonlar" : [{ "TelTip" : "Tel", "Numara": "35-12" }, { "TelTip" : "Fax", "Numara": "35-34" } ] }, { "AdresTip" : "Sube", "Ulke" : "TR", "Il" : "35", "Ilce" : "Karşıyaka", "Telefonlar" : [{ "TelTip" : "Tel", "Numara": "35-56" }, { "TelTip" : "Fax", "Numara": "35-78" } ] } ] }' SELECT TKisiler.Ad ,TKisiler.Soyad ,TAdresler.[AdresTip] ,TAdresler.[Ulke] ,TAdresler.[Il] ,TAdresler.[Ilce] ,TTelefonlar.[TelTip] ,TTelefonlar.[Numara] FROM OPENJSON(@json) WITH ( Ad NVARCHAR(25) '$.Ad' ,Soyad NVARCHAR(25) '$.Soyad' ,Adresler NVARCHAR(MAX) '$.Adresler' AS JSON ) AS TKisiler CROSS Apply OPENJSON(Adresler, '$') WITH ( [AdresTip] NVARCHAR(25) '$.AdresTip' ,[Ulke] NVARCHAR(25) '$.Ulke' ,[Il] NVARCHAR(25) '$.Il' ,[Ilce] NVARCHAR(25) '$.Ilce' ,Telefonlar NVarchar(MAX) '$.Telefonlar' AS JSON ) AS TAdresler CROSS Apply OPENJSON(Telefonlar, '$') WITH ( [TelTip] NVARCHAR(25) '$.TelTip' ,[Numara] NVARCHAR(25) '$.Numara' ) AS TTelefonlar
Table To JSON Format
Select * From Table For JSON Pathyada
Select * From Table For JSON Auto
Table To JSON Array Format (Alıntı)
DROP TABLE IF EXISTS #Home; GO DROP TABLE IF EXISTS #Car; GO DROP TABLE IF EXISTS #Toy; GO CREATE TABLE #Home ( HomeId int IDENTITY PRIMARY KEY, City nvarchar(20), State nchar(2) ); GO CREATE TABLE #Car ( CarId int IDENTITY PRIMARY KEY, HomeId int, Year smallint, Make nvarchar(20), Model nvarchar(20), FOREIGN KEY (HomeId) REFERENCES #Home(HomeId) ); GO CREATE TABLE #Toy ( ToyId int IDENTITY PRIMARY KEY, HomeId int, Category nvarchar(20), RiderCapacity int, FOREIGN KEY (HomeId) REFERENCES #Home(HomeId) ); GO INSERT INTO #Home (City,State) VALUES ('Cleveland','OH') INSERT INTO #Home (City,State) VALUES ('Malibu','CA') INSERT INTO #Car (HomeId,Year, Make, Model) VALUES ('1','2017', 'Volkswagen', 'Golf') INSERT INTO #Car (HomeId,Year, Make, Model) VALUES ('2','2014', 'Porsche', '911') INSERT INTO #Toy (HomeId,Category, RiderCapacity) VALUES ('1','Bicycle', 1) INSERT INTO #Toy (HomeId,Category, RiderCapacity) VALUES ('2','Kayak', 2) SELECT * FROM #Home SELECT * FROM #Car SELECT * FROM #Toy SELECT h.HomeId, h.City, h.State, GarageItems = JSON_QUERY('[' + STRING_AGG( GarageItems.DynamicData,',') + ']','$') FROM #Home h INNER JOIN ( SELECT HomeId, JSON_QUERY(Cars,'$') AS DynamicData FROM #Home h CROSS APPLY ( SELECT ( SELECT * FROM #Car c WHERE c.HomeId = h.HomeId FOR JSON PATH, WITHOUT_ARRAY_WRAPPER ) AS Cars ) d UNION ALL SELECT HomeId, JSON_QUERY(Cars,'$') AS DynamicData FROM #Home h CROSS APPLY ( SELECT ( SELECT * FROM #Toy c WHERE c.HomeId = h.HomeId FOR JSON PATH, WITHOUT_ARRAY_WRAPPER ) AS Cars ) d ) GarageItems ON h.HomeId = GarageItems.HomeId GROUP BY h.HomeId, h.City, h.State
Bilgilendirme için çok teşekkürler.
(16-04-2019, Saat: 11:48)Fesih ARSLAN Adlı Kullanıcıdan Alıntı:(16-04-2019, Saat: 10:27)adelphiforumz Adlı Kullanıcıdan Alıntı: Tekrar Selamlar
Acaba elimizdeki bir table verisini aynı şekilde String birleştirme yolu olmadan direkt JSon yapıya çeviren yapı nasıl yapılır.
Mesela ilk verdiğim örneğin tablo verisinin aynı şekilde JSON ARRAY formatına dönüşmesi gibi
Teşekkürler
Merhaba,
FireDAC bileşen seti kullanıyorsanız bir kaç çözüm yolu sunabilirim.
I. Yöntem
TFDJSONDataSets ve TFDJSONDataSetsWriter sınıflarını kullanabilirsiniz.
Elde ettiğiniz JSONDataSet'i TFDJSONDataSetsReader sınıf yardımıyla çözümleyerek DataSet yapısına yeniden dönüştürebilirsiniz.
Örnek,
1- DataSnap REST Application
2- FireDACJSONReflect for DataSnap
II. Yöntem
TFDBatchMove bileşenini kullanabilirsiniz. TFDBatchMoveDataSetWriter ve TFDBatchMoveDataSetReader bileşenleri yardımıyla bir dataset'ten veri alıp JSON yapısına dönüştürebilirsiniz.
Örnek,
1- C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDBatchMove
2- DataSet Mapping to JSON
III. Yöntem
TFDMemTable datasetini kullanabilirsiniz.
Örnek,
Yeni Kaynak Kitabımızda Sayfa 748 - DataSet Yapısını JSON Formatına Dönüştürmek
Yeni Kaynak Kitabımızda Sayfa 751 - JSON DataSet Yapısını DataSet Formatına Dönüştürmek
Bunlar benim bildiklerim. Belki birkaç yöntem daha vardır.
örneklendirme ve anlatım için çok teşekkür ederiz Fesih Bey.