为了摆脱"result"
你应该使用的标签OnFormatResult
的事件TDSHTTPWebDispatcher
。尤其是价值Handled
。的价值Handled
is 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"}]}
I add 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"}
附言。答案在这里找到:REST 响应的 FormatResult 事件部分 http://mathewdelong.wordpress.com/2011/09/15/delphilive-2011-recap/.