带纯JSON的Delphi XE7 Datasnap
我有这个:
function TWS.listJSON(const id: integer): TJSONObject;
var LDataSets: TFDJSONDataSets;
begin
LDataSets := the_list(id); //the_list:TFDJSONDataSets
try
Result := TJSONObject.Create;
TFDJSONInterceptor.DataSetsToJSONObject(LDataSets, Result);
finally
LDataSets.Free;
end;
end;
一切正常,“the_list()”将从我的选择中获得所有需要的数据,最后我会得到结果。 一些Java客户端将连接访问类似于:http:// localhost:8080 / datasnap / rest / Tws / listJSON / 123
为了试一下,我安装了一个名为Advanced Rest Client的Chrome扩展,并且我得到了这样的结果:
{"list":"QURCUw4AAADGAQAA/wABAAH/Av8DBAAO...."}
在TWebModule1.DSHTTPWebDispatcher1FormatResult()中进行一些更改后;
它似乎是一个压缩的JSON数据,据我所知,Java可以处理,但我不确定,我更喜欢一个未压缩的纯JSON输出。 我知道使用mORMOt可以做到这一点,但我想尝试一下,至于使用mORMOt我们应该学到很多东西。
是否有可能通过使用RAD Datasnap服务器来输出纯JSON? 也许一切都是绝对正确的,我只是不知道...
我认为它不会奏效,我假设你需要使用德尔福单位来使用FireDacJsonreflect。
你可以自己创建Json输出,看到这个小例子,我使用客户数据集中的示例数据库只有3字段的公有语言,你可能会使它更复杂一点,也是我猜测的另一个结构
只是一个想法..
function TServerMethods1.JsonDB: TJSONObject; // Hold the array
var
i : Integer;
JsonArray: TJSONArray;
record_number : Integer;
begin
result:=TJSONObject.Create;
// Field names
JsonArray:=TJSONArray.Create;
ClientDataSet1.First;
for i := 0 to ClientDataSet1.Fields.Count-1 do
Begin
JsonArray.AddElement(TJSONObject.Create(TJSONPair.Create('Field'+I.ToString ,ClientDataSet1.Fields[i].FieldName)));
End;
Result.AddPair('Fields',JsonArray);
//Data
record_number:=0;
while not ClientDataSet1.Eof do
Begin
inc(record_number);
JsonArray:=TJSONArray.Create;
for i := 0 to ClientDataSet1.Fields.Count-1 do
Begin
JsonArray.AddElement(TJSONObject.Create(TJSONPair.Create(I.ToString,ClientD ataSet1.Fields[i].Asstring)));
End;
Result.AddPair('record-'+record_number.ToString,JsonArray);
ClientDataSet1.Next;
End;
end;
这应该会给出类似的结果
{ “结果”:[{ “字段”:[{ “Field0”: “CustNo”},{ “字段1”: “公司”},{ “字段2”: “国家”}], “记录1”:[ {“0”:“1221”},{“1”:“考爱岛潜水专柜”},{“2”:“美国”}],“记录-2”:[{“0”:“1231” {“1”:“Unisco”},{“2”:“巴哈马”}],“记录-3”:[{“0”:“1351”},{“1” “2”:“塞浦路斯”}],“记录-4”:[{“0”:“1354”},{“1”:“Cayman Divers World Unlimited”},{“2” }],“record-5”:[{“0”:“1356”},{“1”:“Tom Sawyer潜水中心”},{“2”:“美属维尔京群岛”}] “:[{”0“:”1380“},{”1“:”Blue Jack Aqua Center“},{”2“:”US“}],”record-7“:[{”0“:” “记录8”:[{“0”:“1510”},{“1”:“VIP潜水员俱乐部”},{“2”:“美属维尔京群岛”}} :“海洋乐园”},{“2”:“美国”}],“记录-9”:[{“0”:“1513”},{“1”:“Fantastique Aquatica”},{“2” :“哥伦比亚”}},“记录10”:[{“0”:“1551”},{“1”:“Marmot潜水员俱乐部”},{“2”:“加拿大”}] 11“:[{”0“:”1560“},{”1“:”深度冲锋“},{”2“:”美国“}],”记录12“:[{”0“:” “记录13”:[{“0”:“1624”},{“1”:“Makai SCUBA Club“},{”2“:”US“}],”record-14“:[{”0“:”1645“},{”1 “:”行动俱乐部“},{”2“:”美国“}],”记录15“:[{”0“:”1651“},{”1“:”牙买加潜水中心“ 2“:”西印度群岛“}],”记录16“:[{”0“:”1680“},{”1“:”岛屿发现者“},{”2“:”美国“}] record-17“:[{”0“:”1984“},{”1“:”冒险海底“}
procedure TWebModuleServer.DSHTTPWebDispatcher1FormatResult(Sender: TObject;
var ResultVal: TJSONValue; const Command: TDBXCommand; var Handled: Boolean);
var
JSONValue: TJSONValue;
begin
if Command.Text = 'TServerMethodsServer.GetVendas' then
begin
Handled := True;
JSONValue := ResultVal;
ResultVal := TJSONArray(JSONValue).Get(0);
TJSONArray(JSONValue).Remove(0);
JSONValue.Free;
end;
end;
链接地址: http://www.djcxy.com/p/64685.html