Delphi语言最好的JSON代码库 mORMot

mORMot没有控件安装,直接添加到lib路径,
工程中直接添加syncommons,syndb等到uses里


在进行网络编程中需要JSON对象的构建与解析,
这个Delphi XE+自带:
{KaTeX parse error: Expected 'EOF', got '}' at position 22: …pilerVersion>22}̲, System.JSon{ELSE}, DBXJSON{$IFEND}
不过,不好用,大家更喜欢SuperObject。我本人以前一直用JsonDataObjects。
今天要给大家介绍的这套JSON代码库算是“世外高人”,身怀绝世武功,而默默无闻,这就是 mORMot 系列开发框架。这是一个功能超级强大,学习曲线壁陡的开源框架。

http://synopse.info/

Project Name: Synopse mORMot Framework
Document Name: Software Architecture Design
Document Revision: 1.18
Date: May 27, 2016
Project Manager: Arnaud Bouchez

这是PDF文档下载地址:
http://synopse.info/files/pdf/Synopse%20mORMot%20Framework%20SAD%201.18.pdf
信息量达到惊人的2127页。大部分人被这份文档吓到,以至于错过了修炼这套“绝世武功”的机会。
今天咱们从中把JSON编程单拣出来,看看mORMot有什么神奇的地方。
使用mORMot没有想象的那样难,使用JSon只需要引用一个文件synCommons。下面我们来看代码,将SuperObject与mORMot做一个对比:

const cstMaxTest = 100000;

procedure TForm1.TestSO;
var jo: ISuperObject; i: Int64; sw: TStopWatch;
begin
sw := TStopWatch.Create;
jo := SO();
i := 0;
while i < cstMaxTest do begin
jo.S[‘Name’] := ‘This is a Str’ + IntToStr(i);
jo.I[‘Age’] := i;
jo.O[‘List’] := SO(‘[1,“Hello”,5,{“name”:“c5soft”,“age”:50}]’);
if i = 100 then
Log(‘SO:’ + jo.AsJSon());
inc(i);
end;
Log('SuperObject: ’ + sw.Stop());
sw.free;
end;

procedure TForm1.TestMJ;
var jo: Variant; i: Int64; sw: TStopWatch;
begin
TDocVariant.New(jo); ;
sw := TStopWatch.Create;
i := 0;
while i < cstMaxTest do begin
jo.Name := ‘This is a Str’ + IntToStr(i);
jo.Age := i;
jo.List:=_JSon(‘[1,“Hello”,5,{“name”:“c5soft”,“age”:50}]’);
if i = 100 then
Log(‘MJ:’ + VariantSaveJSON(jo));
inc(i);
end;
Log('mORMot JS: ’ + sw.Stop());
sw.free;
end;

做一个10万次的测试,这是输出结果:
SO:{“Age”:100,“Name”:“This is a Str100”,“List”:[1,“Hello”,5,{“age”:50,“name”:“c5soft”}]}
SuperObject: 00:01.561
MJ:{“Name”:“This is a Str100”,“Age”:100,“List”:[1,“Hello”,5,{“name”:“c5soft”,“age”:50}]}
mORMot JS: 00:00.326

发现了吧,mORMot比SuperObject快太多,干同样的活,SuperObject用的时间是mORMot的5倍。
使用mORMot还用另外两个好处:
其一、用jo.Name代替jo.S[‘Name’]更直观
其二、在调试阶段设置断点,观察jo的值,delphi告诉你:{“Name”:“This is a Str100”,“Age”:100,“List”:[1,“Hello”,5,{“name”:“c5soft”,“age”:50}
而你去跟踪SuperObject的jo,Delphi只能告诉你那是一个对象,具体值是多少,她说“太复杂,一言能尽”,结果什么也看不到。

下期预告:windows下构建http服务,放弃indy(intraweb),改用iocp(diocp)吗?错了!用http.sys才是王道,这一切mORMot已经悄悄地为我们准备好了。

http://bbs.2ccc.com/topic.asp?topicid=511839


我测试了,我一个表内一次提取12万多条数据,服务器端生成json串时间不到3秒,程序和数据库都在我机器上,不知道测试的准确不


mORMot内部集成的数据库是SQLite,mORMot可以连接任何当前流行的数据库,mORMot还可以不连接任何数据库,用内存表来工作。

说到SQLite,这也是很牛X的,很独特的。这是一种动态数据类型的数据库,create table时可以不指定字段类型,指定了数据类型比如整数型,也可以保存字符串类型的数据。这是目前开源、跨平台、代码量最小的数据库。如果数据量不大,希望集成在可执行文件中 (embbed),sqlite是一个很好的选择。

如果要输出很大的数据到终端界面,一定要使用分页。即使Delphi生成json数据
不慢,网络传送速度快不了,前端(比如浏览器)装配数据快不了。SQLite的select 支持分页:
SELECT … FROM … WHERE … ORDER BY … LIMIT… OFFSET…

没有mORMot,可以用DISQLite,仅能做单机版的软件,有了mORMot,使用SQLite数据库可以做C/S架构的软件,而且很方便的就有了3Tier, 4Tier。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个用 Delphi 和 mORMot 实现的 Web 服务的详细实现代码。 1. 首先,我们需要创建一个新的 Delphi 项目。 2. 在项目中添加以下单元:mORMot.pas, SynCommons.pas, Synopse.inc。 3. 在项目中创建一个新的单元,命名为 MyWebService.pas,并在其中添加以下代码: ```delphi unit MyWebService; interface uses SysUtils, Classes, mORMot; type TMyWebService = class(TObject) private fServer: TSQLRestServerHTTP; public constructor Create; destructor Destroy; override; procedure Start; procedure Stop; end; implementation constructor TMyWebService.Create; begin inherited; fServer := TSQLRestServerHTTP.Create('8080', []); end; destructor TMyWebService.Destroy; begin fServer.Free; inherited; end; procedure TMyWebService.Start; begin fServer.ServiceRegister(TSQLRest, [TypeInfo(TSQLRest)]); fServer.ServiceDefine(TSQLRest, [TypeInfo(TSQLRest)]); fServer.Active := True; end; procedure TMyWebService.Stop; begin fServer.Active := False; end; end. ``` 4. 接下来,我们需要在主程序中实例化并启动我们的 Web 服务。在主程序中添加以下代码: ```delphi program MyProgram; uses Forms, MyWebService in 'MyWebService.pas'; var MyService: TMyWebService; begin Application.Initialize; MyService := TMyWebService.Create; MyService.Start; Application.Run; MyService.Stop; MyService.Free; end. ``` 5. 最后,我们需要定义一个可以通过 Web 服务访问的方法。在 MyWebService 单元中添加以下代码: ```delphi type TSQLRest = class(TSQLRestServerDB) public function Echo(const Value: string): string; end; function TSQLRest.Echo(const Value: string): string; begin Result := Value; end; ``` 现在,我们已经成功地创建了一个简单的基于 mORMotDelphi Web 服务。我们可以使用以下 URL 来访问 Echo 方法: ``` http://localhost:8080/root/Echo?Value=Hello%20World! ``` 该 URL 将返回以下 JSON 格式的响应: ```json { &quot;result&quot;: &quot;Hello World!&quot; } ``` 希望这个示例对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值