首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用纯JSON的Delphi XE7 Datasnap

使用纯JSON的Delphi XE7 Datasnap
EN

Stack Overflow用户
提问于 2015-05-20 04:14:39
回答 2查看 1.7K关注 0票数 5

我有这个:

代码语言:javascript
复制
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()“将从我的select中获得所有需要的数据,最后我将得到结果。一些Java客户端将通过访问以下内容进行连接:http://localhost:8080/datasnap/rest/Tws/listJSON/123

为了尝试一下,我安装了一个名为Advanced Rest Client的Chrome扩展,结果如下:

代码语言:javascript
复制
{"list":"QURCUw4AAADGAQAA\/wABAAH\/Av8DBAAO...."} 

在TWebModule1.DSHTTPWebDispatcher1FormatResult();中做了一些更改之后

它似乎是一个压缩的JSON数据,据我所知,Java可以处理它,但我不确定,我更喜欢未压缩的纯JSON输出。我知道使用mORMOt可以做到这一点,但我想试一试,因为使用mORMOt我们应该学到很多东西。

是否可以通过使用RAD Datasnap服务器输出纯JSON?也许每件事都是绝对正确的,我只是不知道…

EN

回答 2

Stack Overflow用户

发布于 2015-05-23 01:50:01

我不认为它会工作,我假设你需要Delphi单位来使用FireDacJsonreflect。

你可以自己做Json输出,看看这个小例子,我在一个clientdataset中使用了comany from example DB only 3字段,你可能会使它变得更复杂,我猜也是另一种结构

这只是个想法。

代码语言:javascript
复制
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;

这应该会产生如下结果

{"result":[{"Fields":{"Field0":"CustNo"},{"Field1":"Company"},{"Field2":"Country"},"record-1":{"0":"1221"},{"1":"Kauai Dive Shoppe"},{"2":"US"},"record-2":{"0":"1231"},{"1":"Unisco"},{“2”:“巴哈马”},"record-3":{"0":"1351"},{"1":"Sight Diver"},{"2":"Cyprus"},"record-4":{"0":"1354"},{“1”:“开曼潜水世界无限”},{“2”:“英属西印度群岛”},"record-5":{"0":"1356"},{"1":"Tom Sawyer Diving Centre"},{“2”:“美属维尔京群岛”},"record-6":{"0":"1380"},{"1":"Blue Jack Aqua Center"},{"2":"US"},"record-7":{"0":"1384"},{"1":"VIP Divers Club"},{“2”:“美属维尔京群岛”},"record-8":{"0":"1510"},{“1”:“海洋天堂”},{"2":"US"},"record-9":{"0":"1513"},{"1":"Fantastique Aquatica"},{“2”:“哥伦比亚”},"record-10":{"0":"1551"},{“1”:“土拨鼠潜水俱乐部”},{“2”:“加拿大”},"record-11":{"0":"1560"},{“1”:“深度冲锋”},{"2":"US"},"record-12":{"0":"1563"},{"1":"Blue Sports"},{"2":"US"},"record-13":{"0":"1624"},{"1":"Makai SCUBA Club"},{"2":"US"},"record-14":{"0":"1645"},{"1":"Action Club"},{"2":"US"},"record-15":{"0":"1651"},{“1”:“牙买加潜水中心”},{“2”:“西印度群岛”},"record-16":{"0":"1680"},{“1”:“岛屿探索者”},{"2":"US"},"record-17":[{"0":"1984"},{“1”:“海底探险”}

票数 2
EN

Stack Overflow用户

发布于 2015-12-29 01:45:21

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30335303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档