{ İsmail Kocacan } unit uJsonHelper; interface uses Data.DB, System.SysUtils, Data.DBXJSON, Data.DBXJSONCommon, Data.DBXJSONReflect; type TDatasetJSONHelper = class helper for TDataset public function ToJSONData: TJSONArray; end; implementation { TDatasetJSONHelper } function TDatasetJSONHelper.ToJSONData: TJSONArray; var jso: TJSONObject; jsa: TJSONArray; jsp: TJsonPair; J: Integer; begin Self.Open; jsa := TJSONArray.Create(); while not Self.Eof do begin jso := TJSONObject.Create(); for J := 0 to FieldCount - 1 do jso.AddPair(TJsonPair.Create(Fields[J].DisplayName, Fields[J].Value)); jsa.AddElement(jso); Self.Next; end; Self.Close; Result := jsa; end; end.TDataset sınıfına uzanım fonksiyonu olarak yazmamızın sebebi; TDataset sınıfı kullanılarak genişletilen(kalıtılan) üst sınıflarda da,kolayca kullanabilelim diyedir.
Örneğin ;
SQLQuery1.ToJSONData;
ADOQuery1.ToJSONData;
UniQuery1.ToJSONData;
BilmemNeQuery1.ToJSONData;
Şeklinde kullanabilmek mümkün olacaktır.
Örnek Çıktı
{ "result": [ {"RID":"3","FIRSTNAME":"serdar","LASTNAME":"sezer"}, {"RID":"2","FIRSTNAME":"kemal","LASTNAME":"bayat"}, {"RID":"1","FIRSTNAME":"ismail","LASTNAME":"kocacan"} ] }Yukarıdaki çıktıyı alabilmek için bir takım düzenlemeler yapmak gerekiyor.Bu düzenlemeleri Datasnap REST Ve JSON Formatı Hakkında konusunda bulabilirsiniz.
İsmail hocam,
YanıtlaSilÇalışmalarınızdan dolayı çok teşekkür ederim.
Yukarıdaki kodu unit olarak oluşturduğumda aşağıdaki hatayı alıyorum..
------------------------------------------------------
[dcc32 Error] uJsonHelper.pas(38): E2251 Ambiguous overloaded call to 'Create'
System.JSON.pas(530): Related method: constructor TJSONPair.Create(const string; const Boolean);
System.JSON.pas(524): Related method: constructor TJSONPair.Create(const string; const Double);
System.JSON.pas(506): Related method: constructor TJSONPair.Create(const string; const string);
----------------------------------------------------
koddaki
jso.AddPair(TJsonPair.Create(Fields[J].DisplayName, Fields[J].Value));
satırı pasif ettiğimde hata gidiyor.. Ama bu sefer çalışmıyor..
radstudio 11 kullanıyorum..
ilginden dolayı teşekkür ederim.
Çözüldü:
YanıtlaSilÇalışan kod;
{ İsmail Kocacan }
unit uJsonHelper;
interface
uses
Data.DB,
System.SysUtils,
System.JSON,
Data.DBXJSON,
Data.DBXJSONCommon,
Data.DBXJSONReflect;
type
TDatasetJSONHelper = class helper for TDataset
public
function ToJSONData: TJSONArray;
end;
implementation
{ TDatasetJSONHelper }
function TDatasetJSONHelper.ToJSONData: TJSONArray;
var
jso: TJSONObject;
jsa: TJSONArray;
jsp: TJsonPair;
J: Integer;
begin
Self.Open;
jsa := TJSONArray.Create();
while not Self.Eof do
begin
jso := TJSONObject.Create();
for J := 0 to FieldCount - 1 do
jso.AddPair(TJsonPair.Create(Fields[J].DisplayName, Fields[J].Text));
jsa.AddElement(jso);
Self.Next;
end;
Self.Close;
Result := jsa;
end;
end.