JSON Verileri XML formatına Çevirme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
JSON Verileri XML formatına Çevirme
Merhaba Arkadaşlar,
Bir servisten JSON formatında veri alıyorum. Bunu xml formatına dönüştürmek istiyorum.
Nasıl yapabilirim yardımcı olabilir misiniz?
Bir servisten JSON formatında veri alıyorum. Bunu xml formatına dönüştürmek istiyorum.
Nasıl yapabilirim yardımcı olabilir misiniz?
Re: JSON Verileri XML formatına Çevirme
Merhaba, JSON örneği olmadan yardımcı olmak pek mümkün olmaz.
Re: JSON Verileri XML formatına Çevirme
Merhaba,
Örnek json formatı ve dönüştürmek istediğim xml formatı aşağıdaki linklerdedir.
İlginiz için teşekkür ederim.
http://dosya.co/x4pbnqomz723/sip.json.html
http://dosya.co/nfuy6ftwjhyf/sip.XML.html
Örnek json formatı ve dönüştürmek istediğim xml formatı aşağıdaki linklerdedir.
İlginiz için teşekkür ederim.
http://dosya.co/x4pbnqomz723/sip.json.html
http://dosya.co/nfuy6ftwjhyf/sip.XML.html
Re: JSON Verileri XML formatına Çevirme
Merhaba,
Kullandığınız Delphi sürümünü belirtmemişsiniz. Aşağıdaki örnek Delphi 10.1 Update 2 ile çalışmaktadır.
Json okumak için tüm yapıyı tanımlamaya gerek olmayabilir. Ücretsiz olduğu, eski Delphi sürümlerinde de çalışabildiği için çözüm önerisini mORMot framework fonksiyonu yardımı ile veriyorum. Ancak siz kendi tercih ettiğiniz bir json çözümü kullanabilirsiniz.
https://synopse.info
Json okuma:
Yukarıdaki şekilde okuduğunuz verileri aşağıdaki linkte gösterilen XML dosyası oluşturma kod örneğini inceleyerek istenilen formatta kaydetmeniz mümkün.
viewtopic.php?f=2&t=36475&p=196820#p196766
XML dosyasına yazılacak alanların JSON alanları ile birebir aynı olmamaları sebebi ile tam çalışır kod örneği vermek mümkün değil.
Kullandığınız Delphi sürümünü belirtmemişsiniz. Aşağıdaki örnek Delphi 10.1 Update 2 ile çalışmaktadır.
Json okumak için tüm yapıyı tanımlamaya gerek olmayabilir. Ücretsiz olduğu, eski Delphi sürümlerinde de çalışabildiği için çözüm önerisini mORMot framework fonksiyonu yardımı ile veriyorum. Ancak siz kendi tercih ettiğiniz bir json çözümü kullanabilirsiniz.
https://synopse.info
Json okuma:
Kod: Tümünü seç
uses
DateUtils,
System.IOUtils,
SynCommons; // Synopse mORMot framework unit
procedure TForm1.Button1Click(Sender: TObject);
var
V: Variant;
JsonString: RawUTF8;
i: Integer;
ADate: TDateTime;
begin
JsonString := RawUTF8(TFile.ReadAllText(Edit1.Text));
V := _JsonFast(JsonString);
for i := 0 to V.Count-1 do
begin
Memo1.Lines.Add(V.orders._(0).Items._(i).Product.Name);
Memo1.Lines.Add(V.orders._(0).LastActivityDate);
ADate := ISO8601ToDate(V.orders._(0).LastActivityDate);
Memo1.Lines.Add('DateTime değişken üzerinden: ' + FormatDateTime('yyy-mm-dd', ADate));
end;
end;
viewtopic.php?f=2&t=36475&p=196820#p196766
XML dosyasına yazılacak alanların JSON alanları ile birebir aynı olmamaları sebebi ile tam çalışır kod örneği vermek mümkün değil.
Re: JSON Verileri XML formatına Çevirme
Hocam teşekkür ederim.
Buradaki _JSONFAST nedir tam olarak.
Yönlendirdiğiniz siteden indirdiğim dosyalarda hatalar çıkıyor.
Siz düzgün çalışan pas dosyalarını paylaşabilir misiniz?
Buradaki _JSONFAST nedir tam olarak.
Yönlendirdiğiniz siteden indirdiğim dosyalarda hatalar çıkıyor.
Siz düzgün çalışan pas dosyalarını paylaşabilir misiniz?
Re: JSON Verileri XML formatına Çevirme
JSON temel olarak belli bir yapıyı tek satır string değere çevirir (serialization) sizin göderdiğiniz örnekteki json da bu haldeki bir Json string.
Seri haldeki Json tekar orjinal yapıya geri çevrilir (de-serialize) bunun birden fazla yöntemi vardır. Delphi dilinde record veya class yapısı oluşturup içlerinde tanımlanmış değişkenlere değerler atanabilir. Veya benim verdiğim örnekte ise de-serialization işlemi bir variant değişken içine açılıyor.
Kısaca _JsonFast() fonksiyonu variant değişken içine json de-serialize etmek için kullanılır.
Ekte 3 dosya halinde uygulamayı gönderiyorum. Forum dosya boyutu limiti sebebi ile bölmem gerekti. Açmak için Winrar 5.0 veya sonrası bir sürüm kullanılması gerekli.
Synopse framework içinden sadece gerekli unitleri proje ile beraber ekledim.
Seri haldeki Json tekar orjinal yapıya geri çevrilir (de-serialize) bunun birden fazla yöntemi vardır. Delphi dilinde record veya class yapısı oluşturup içlerinde tanımlanmış değişkenlere değerler atanabilir. Veya benim verdiğim örnekte ise de-serialization işlemi bir variant değişken içine açılıyor.
Kısaca _JsonFast() fonksiyonu variant değişken içine json de-serialize etmek için kullanılır.
Ekte 3 dosya halinde uygulamayı gönderiyorum. Forum dosya boyutu limiti sebebi ile bölmem gerekti. Açmak için Winrar 5.0 veya sonrası bir sürüm kullanılması gerekli.
Synopse framework içinden sadece gerekli unitleri proje ile beraber ekledim.
- Dosya ekleri
-
- json to xml.part03.rar
- (101.25 KiB) 225 kere indirildi
-
- json to xml.part02.rar
- (199.26 KiB) 210 kere indirildi
-
- json to xml.part01.rar
- (199.18 KiB) 219 kere indirildi
Re: JSON Verileri XML formatına Çevirme
Merhaba Hocam çok teşekkür ederim.
Küçük bir şey daha sormak istiyorum. Aşağıdaki gibi direkt olarak json veriyi memoya yazdırıyorum. Normalde bir dosya almıyorum.
Direkt olarak stringi çekiyorum önüme.
memo1.Lines.Text := RestRequest1.Response.Content; // buraya verinin tamamı geliyor.
Fakat
V := _JsonFast(RestRequest1.Response.JSONText); veya
V := _JsonFast(RestRequest1.Response.Content);
ile verilerin tamamı memoya gelmiyor. items alanında 2 kayıt varken tek kayıt gösteriyor.
Bunun sebebini nasıl yorumlarsınız?
Küçük bir şey daha sormak istiyorum. Aşağıdaki gibi direkt olarak json veriyi memoya yazdırıyorum. Normalde bir dosya almıyorum.
Direkt olarak stringi çekiyorum önüme.
memo1.Lines.Text := RestRequest1.Response.Content; // buraya verinin tamamı geliyor.
Fakat
V := _JsonFast(RestRequest1.Response.JSONText); veya
V := _JsonFast(RestRequest1.Response.Content);
ile verilerin tamamı memoya gelmiyor. items alanında 2 kayıt varken tek kayıt gösteriyor.
Bunun sebebini nasıl yorumlarsınız?
Re: JSON Verileri XML formatına Çevirme
Örnek kod ve gelen json bilgisini paylaşabilir misiniz?
Re: JSON Verileri XML formatına Çevirme
Hocam Merhaba,
Ben sizin gönderdiğiniz örnek üzerinde çalışıyorum şu an tamamen.
Çünkü öğrenme aşamasındayım.
Aşağıdaki gibi json veriyi memoya tam içeriğiyle çekiyorum yani size gönderdiğim sip.json formatındakinin aynısını alıyorum.
Çünkü siz dosya isteyince ben memoya dönen sonucu json olarak kaydedip verdim.
//Memo1.Lines.Text := Request.Response.Content
Ben sizin gönderdiğiniz örnek üzerinde çalışıyorum şu an tamamen.
Çünkü öğrenme aşamasındayım.
Aşağıdaki gibi json veriyi memoya tam içeriğiyle çekiyorum yani size gönderdiğim sip.json formatındakinin aynısını alıyorum.
Çünkü siz dosya isteyince ben memoya dönen sonucu json olarak kaydedip verdim.
//Memo1.Lines.Text := Request.Response.Content
Kod: Tümünü seç
uses
DateUtils,
System.IOUtils,
SynCommons,REST.Types;
procedure TForm1.Button1Click(Sender: TObject);
var
V: Variant;
JsonString: RawUTF8;
i: Integer;
begin
ResetRESTComponents;
Client.Authenticator := BasicAuthenticator;
BasicAuthenticator.Username := 'okan@*****.com.tr';
BasicAuthenticator.Password := '******';
Client.BaseURL := 'https://api.*****/Orders/';
Request.Method := TRESTRequestMethod.rmGET;
Request.Resource := '?Id=0&page=1&pageSize=1';
Request.Execute;
Memo1.Lines.Text := Request.Response.Content; // Burada dönen veriyi .json olarak kaydedip paylaştım sizinle
JsonString := RawUTF8(TFile.ReadAllText(Edit1.Text));
V := _JsonFast(JsonString);
for i := 0 to V.Count-1 do
begin
Memo2.Lines.Add(V.orders._(0).Items._(i).Product.Name);
Memo2.Lines.Add(V.orders._(0).LastActivityDate);
Memo2.Lines.Add('DateTime değişken üzerinden: ' + DateTimeToStr(ISO8601ToDate(V.orders._(0).LastActivityDate)));
end;
end;
procedure TForm1.ResetRESTComponents;
begin
Request.ResetToDefaults;
Response.ResetToDefaults;
Client.ResetToDefaults;
Memo1.Clear;
end;
Re: JSON Verileri XML formatına Çevirme
Kodun ilgili bölümlerini aşağıdaki şekilde değiştirebilir misiniz?
Kod: Tümünü seç
Request.Execute;
JsonString := RawUTF8(Request.Response.Content);
V := _JsonFast(JsonString);
Re: JSON Verileri XML formatına Çevirme
Bu şekilde denemiştim hocam. Sadece 1 satır getiriyor.
Ama dosyadan okuma yönteminiz ile bütün satırlar geliyor.
Yani dosyadan okumak ile gelen stringi okumak arasında ne fark olabilir ki?
Ama dosyadan okuma yönteminiz ile bütün satırlar geliyor.
Yani dosyadan okumak ile gelen stringi okumak arasında ne fark olabilir ki?
Re: JSON Verileri XML formatına Çevirme
for i := 0 to V.Count-1 do
hocam burada v.count 1 dönüyor. Sipariş 1 tane olduğundan 1 kez dönmesi normal
bizim için önemli olan siparişin içinde product kaç kez dönüyor bunu bilmek.
O yüzden 1 satır getiriyor önümüze. Product alanının kaç kez döndüğünü öğrenebilir miyiz peki?
hocam burada v.count 1 dönüyor. Sipariş 1 tane olduğundan 1 kez dönmesi normal
bizim için önemli olan siparişin içinde product kaç kez dönüyor bunu bilmek.
O yüzden 1 satır getiriyor önümüze. Product alanının kaç kez döndüğünü öğrenebilir miyiz peki?
Re: JSON Verileri XML formatına Çevirme
Dosyadan okuma işlemi benim servis üzerinden bilgi almam mümkün olmadığı için yapılan bir işlem idi. Sizin gelen json bilgisini dosya içine kaydetmeniz gerekmez hatta yapmamanızı tavsiye ederim.Okann yazdı:Bu şekilde denemiştim hocam. Sadece 1 satır getiriyor.
Ama dosyadan okuma yönteminiz ile bütün satırlar geliyor.
Yani dosyadan okumak ile gelen stringi okumak arasında ne fark olabilir ki?
Re: JSON Verileri XML formatına Çevirme
Yukarıda örnek olarak paylaştığınız Json içinde en başta gönderilen Count değerinin sipariş içindeki ürün adedi olduğunu varsaydım. Eğer bu sipariş adedi ise bana göndermiş olduğunuz örnekte 2 adet sipariş olması gerekli. Ben kendi adıma ikinci bir sipariş göremiyorum.Okann yazdı:for i := 0 to V.Count-1 do
hocam burada v.count 1 dönüyor. Sipariş 1 tane olduğundan 1 kez dönmesi normal
bizim için önemli olan siparişin içinde product kaç kez dönüyor bunu bilmek.
O yüzden 1 satır getiriyor önümüze. Product alanının kaç kez döndüğünü öğrenebilir miyiz peki?
Re: JSON Verileri XML formatına Çevirme
Hocam örnekte 1 sipariş var. Siparişin içinde 2 kalem ürün var yani 2 satırlı bir sipariş örneği bu.
Siparişleri önüme her zaman 1 er tane çekcem. içinde sınırsız satır olabilir.
Ben bu satırların değerlerine ulaşamaz mıyım?
Daha önceden gönderdiğim xml örneğindeki Transaction satırlarına alacağım bu değerleri.
Items alanının dışında kalan değerleri ise transaction dışındaki fiş geneline hitap eden alanlara alacağım. Master-Detail yapısı yani.
Siparişleri önüme her zaman 1 er tane çekcem. içinde sınırsız satır olabilir.
Ben bu satırların değerlerine ulaşamaz mıyım?
Daha önceden gönderdiğim xml örneğindeki Transaction satırlarına alacağım bu değerleri.
Items alanının dışında kalan değerleri ise transaction dışındaki fiş geneline hitap eden alanlara alacağım. Master-Detail yapısı yani.