2012-09-20 25 views
1

我有一個TDataset JSON幫助函數。Datasnap RESTful JSON結果關於?

我想結果返回如下:

{"result":[{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"}]} 

But.Does不work.The返回如下:

{"result":[[{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"}]]} 

我想刪除多餘的[字符...

如何提取這些數據並返回?

{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"} 

我TDataSet的JSON助手功能:

TDatasetJSONHelper = class helper for TDataset 
    public 
    function ToJSONData: TJSONArray; 
    function ToJSONDataWrapper: TJSONValue; 
    end; 

function TDatasetJSONHelper.ToJSONData: TJSONArray; 
var 
    jso: TJSONObject; 
    jsa: TJSONArray; 
    jsp: TJsonPair; 
    J: Integer; 
    avalue: TJSONValue; 
begin 
    Self.Close; 
    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; 


function TDatasetJSONHelper.ToJSONDataWrapper: TJSONValue; 
var 
    aJSON: TJSONObject; 
    apair: TJsonPair; 
    avalue: TJSONValue; 
begin 
    aJSON := TJSONObject.ParseJSONValue 
    (TEncoding.ASCII.GetBytes 
    ('{"result":[[{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"}]]}'), 
    0) as TJSONObject; 

    apair := aJSON.Get(0); 
    avalue := apair.JsonValue; 

    // ??? avalue := '{"rid":"2","firstname":"veli","lastname":"deli"},{"rid":"1","firstname":"ismail","lastname":"kocacan"}'; 
    Result := avalue; 
end; 






function TServerMethods1.GetPersonList: TJSONArray; 
begin 
    Result := dm.AdoQuery1.ToJSONData; 
end; 

function TServerMethods1.GetPersonList2: TJSONValue; 
begin 
    Result := dm.AdoQuery1.ToJSONDataWrapper; 
end; 

我怎樣才能解決這個問題?

+0

我想使用下列內容: 的http://本地主機:8080 /的DataSnap/REST/TServerMethods1/GetPersonList –

回答

2

GetInvocationMetadata()。ResponseCode:= 200;響應內容:='{「rid」:「2」,「firstname」:「veli」,「lastname」:「deli」},{「rid」:「1」,「firstname」 : 「伊斯梅爾」, 「姓」: 「kocacan」}「;

+0

呀! 不錯的解決方案:) –

2

僅供參考,我們在開源代碼庫中添加了一個更完整更快的功能。

它是我們的mORMot框架的一部分,但可以用作獨立單元,而不是綁定到其他功能。

SynVirtualDataSet.pas

function DataSetToJSON(Data: TDataSet): RawUTF8 

this commitassociated forum thread