Чтобы избавиться от тега "result"
, вы должны использовать OnFormatResult
событие TDSHTTPWebDispatcher
.Особенно значение Handled
.Значение Handled
по умолчанию равно false
.Если установлено значение true
, то результат, переданный пользователю, не будет заключен в объект "result"
JSON.Если значение равно false, оно будет заключено в этот объект.
Пример.У меня есть такой код:
function TServerMethods1.EchoStringJSON(Value: string): TJSONObject;
var
JSONObj : TJSONObject;
begin
JSONObj := TJSONObject.Create;
JSONObj.AddPair(TJSONPair.Create('name',Value));
result := JSONObj;
end;
Ответ службы REST выглядит следующим образом: {"result":[{"name":"asdfasdf"}]}
Я добавляю Handled := true;
:
procedure TWebModule1.DSHTTPWebDispatcher1FormatResult(Sender: TObject;
var ResultVal: TJSONValue; const Command: TDBXCommand; var Handled: Boolean);
begin
Handled := true;
end;
выглядит ответ службы RESTкак это: [{"name":"asdfasdf"}]
.
Еще есть "[]"
.Поэтому я добавляю дополнительный код:
procedure TWebModule1.DSHTTPWebDispatcher1FormatResult(Sender: TObject;
var ResultVal: TJSONValue; const Command: TDBXCommand; var Handled: Boolean);
var
Aux: TJSONValue;
begin
//remove [] element
Aux := ResultVal;
ResultVal := TJSONArray(Aux).Items[0];
TJSONArray(Aux).Remove(0);
Aux.Free;
//we do not need "result" tag
Handled := true;
end;
Теперь результат выглядит так: {"name":"asdfasdf"}
PS.Ответ был найден здесь: раздел Событие FormatResult для ответов REST .