gpt4 book ai didi

Delphi DataSnap 框架向 JSON 消息添加内容

转载 作者:行者123 更新时间:2023-12-03 14:57:43 25 4
gpt4 key购买 nike

我正在使用 Delphi XE DataSnap REST 服务器并尝试返回 JSON 序列化对象。我的方法返回给客户端的结果如下所示:

{"type":"ServerMethodsUnit1.TJSONIssue",
"id":1,
"fields":{
"FIssueNo":90210,
"FTitle":"Beverly Hills...that''s where I want to be",
"FKind":"Wishlist"
}
}

格式良好的 JSON。

问题是,当客户端收到消息时,会添加一堆内容,如下所示:

{"result": ["{\"type\":\"ServerMethodsUnit1.TJSONIssue\",
\"id\":1,
\"fields\":{
\"FIssueNo\":90210,
\"FTitle\":\"Beverly Hills...that's where I want to be\",
\"FKind\":\"Wishlist\"}
}
"
]
}

我得到了一堆反斜杠字符和前面的“result”标签。

我想知道是否有人知道为什么我会得到这些额外的东西以及如何摆脱它。

最佳答案

要摆脱 "result" 标记,您应该使用 TDSHTTPWebDispatcherOnFormatResult 事件。特别是值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。答案在这里找到: section FormatResult Event for REST Responses .

关于Delphi DataSnap 框架向 JSON 消息添加内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4824063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com