2012-09-20 3 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 Helper:

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/отдых/TServerMethods1/GetPersonList –

ответ

2

GetInvocationMetadata(). ResponseCode: = 200;

GetInvocationMetadata(). ResponseContent: = '{"rid": "2", "firstname": "veli", "lastname": "deli"}, {"rid": "1", "firstname" : "исмаил", "фамилия": "kocacan"} ";

+0

Да! Хорошее решение :) –

2

FYI, мы добавили более полную и быструю функцию в наш репозиторий Open Source.

Это часть нашего mORMot, но может использоваться как автономный блок, не привязанный к другим функциям.

См SynVirtualDataSet.pas:

function DataSetToJSON(Data: TDataSet): RawUTF8 

this commit См и associated forum thread.

Смежные вопросы