Delphi 10 Seattle plus 新特性——System.JSON.Builders

  1  {
  2    全能中间件 —— 简单、高效、稳定、安全的三层中间件
  3
  4    1.支持 多账套多数据库,包括SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere,Firebird等多种数据库。
  5    2.支持 快速开发,封装了 TRFConnection 和 TRFDataSet 控件供客户端使用,传统两层应用轻松升级为三层应用。
  6    3.支持 数据压缩、加密传输,效率和安全有保障。
  7    4.支持 数据连接池,提高并发响应速度。
  8    5.支持 客户端执行SQL语句,存储过程,亦可以把逻辑SQL放在中间层,控制权由您一手掌握。
  9    6.支持 Delta更新,比传统的拼接SQL更新方式效率高,兼容性更好。
 10    7.支持 SQL 参数化查询、 分页查询。
 11    8.支持 多表事务更新,会保证数据的一致性。
 12    9.支持 多表联合查询更新其中一个表。
 13    10.支持 多平台开发(Windows/Android/iOS/OS X),各平台使用方法一致。
 14    11.支持 7x24小时长时间稳定运行,已经过多个正式项目长时间考验。
 15
 16    Copyright @2014-2017 by QQ:64445322
 17    All rights reserved.
 18
 19    QQ群:339616649
 20  }
 21 unit Unit1;
 22
 23 interface
 24
 25 uses
 26   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 27   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.JSON.Writers, System.JSON.Types, System.JSON.Builders,
 28   System.JSON.Readers, Vcl.StdCtrls;
 29
 30 type
 31   TForm1 = class(TForm)
 32     btnBuilder: TButton;
 33     Memo1: TMemo;
 34     btnReader: TButton;
 35     Memo2: TMemo;
 36     procedure FormCreate(Sender: TObject);
 37     procedure btnBuilderClick(Sender: TObject);
 38     procedure btnReaderClick(Sender: TObject);
 39   private
 40     { Private declarations }
 41   public
 42     { Public declarations }
 43   end;
 44   //http://docwiki.embarcadero.com/RADStudio/Tokyo/en/JSON#JSON_Frameworks
 45   TJSONBuilder = class(TJSONObjectBuilder)
 46   private
 47     FJsonWriter: TJsonTextWriter;
 48     FStringWriter: TStringWriter;
 49     FStringBuilder: TStringBuilder;
 50   strict private
 51     class var
 52       FJsonBuilder: TJSONBuilder;
 53
 54     class destructor Destroy;
 55   public
 56     constructor Create(const AFormatting: TJsonFormatting = TJsonFormatting.None);
 57     destructor Destroy; override;
 58
 59     function ToJSON: string;
 60
 61     class function NewBuilder(const AFormatting: TJsonFormatting = TJsonFormatting.None): TJSONBuilder; static;
 62   end;
 63
 64   TJsonObjectReader  = class (TJsonTextReader)
 65   private
 66     FStringReader : TStringReader;
 67   strict private
 68     class var
 69       FJsonObjectReader: TJsonObjectReader;
 70     class destructor Destroy;
 71   public
 72     constructor Create(const AJson: string);
 73     destructor Destroy; override;
 74
 75    class function NewReader(const AJson:string): TJsonObjectReader; static;
 76   end;
 77
 78 var
 79   Form1: TForm1;
 80
 81 implementation
 82
 83 {$R *.dfm}
 84
 85
 86 procedure TForm1.btnBuilderClick(Sender: TObject);
 87 var
 88   Builder: TJSONBuilder;
 89 begin
 90   Builder := TJSONBuilder.NewBuilder(TJsonFormatting.Indented);
 91   Builder
 92     .BeginObject
 93       .BeginArray(‘Transaction‘)
 94         .BeginObject.Add(‘id‘, 662713)
 95           .Add(‘firstName‘, ‘John‘)
 96           .Add(‘lastName‘, ‘Doe‘)
 97           .Add(‘price‘, 2.1)
 98           .AddNull(‘parent_id‘)
 99           .Add(‘validated‘, True)
100         .EndObject
101         .BeginObject
102           .Add(‘id‘, 662714)
103           .Add(‘firstName‘, ‘Anna‘)
104           .Add(‘lastName‘, ‘Smith‘)
105           .Add(‘price‘, 4.5)
106           .AddNull(‘parent_id‘)
107           .Add(‘validated‘, False)
108         .EndObject
109         .BeginObject
110           .Add(‘id‘, 662715)
111           .Add(‘firstName‘, ‘Peter‘)
112           .Add(‘lastName‘, ‘Jones‘)
113           .Add(‘price‘, 3.6)
114           .AddNull(‘parent_id‘)
115           .Add(‘validated‘, True)
116         .EndObject
117       .EndArray
118     .EndObject;
119
120   Memo1.Text := Builder.ToJSON;
121
122 end;
123
124 procedure TForm1.btnReaderClick(Sender: TObject);
125 var
126   Reader:TJsonObjectReader;
127 begin
128   Memo2.Clear;
129   Reader:=TJsonObjectReader.NewReader(Memo1.Text);
130
131   while Reader.Read do
132     case Reader.TokenType of
133       TJsonToken.PropertyName:
134       Memo2.Lines.Add(Reader.Value.AsString);
135       TJsonToken.String:
136       Memo2.Lines[Memo2.Lines.Count-1] := Memo2.Lines[Memo2.Lines.Count-1] + ‘: ‘ +Reader.Value.AsString;
137     end;
138 end;
139
140 procedure TForm1.FormCreate(Sender: TObject);
141 begin
142   ReportMemoryLeaksOnShutdown := True;
143 end;
144
145 { TJSONBuilder }
146
147 constructor TJSONBuilder.Create(const AFormatting: TJsonFormatting);
148 begin
149   FJsonBuilder := nil;
150   FStringBuilder := TStringBuilder.Create;
151   FStringWriter := TStringWriter.Create(FStringBuilder);
152   FJsonWriter := TJsonTextWriter.Create(FStringWriter);
153   FJsonWriter.Formatting := AFormatting;
154   inherited Create(FJsonWriter);
155 end;
156
157 destructor TJSONBuilder.Destroy;
158 begin
159   FreeAndNil(FJsonWriter);
160   FreeAndNil(FStringWriter);
161   FreeAndNil(FStringBuilder);
162   inherited;
163 end;
164
165 class destructor TJSONBuilder.Destroy;
166 begin
167   FreeAndNil(FJsonBuilder);
168 end;
169
170 class function TJSONBuilder.NewBuilder(const AFormatting: TJsonFormatting): TJSONBuilder;
171 begin
172   if FJsonBuilder <> nil then
173     FreeAndNil(FJsonBuilder);
174
175   FJsonBuilder := TJSONBuilder.Create(AFormatting);
176
177   Result := FJsonBuilder;
178 end;
179
180 function TJSONBuilder.ToJSON: string;
181 begin
182   Result := FStringBuilder.ToString;
183 end;
184
185 { TJsonObjectReader }
186
187 constructor TJsonObjectReader.Create(const AJson: string);
188 begin
189   FStringReader:= TStringReader.Create(AJson);
190   inherited Create(FStringReader) ;
191 end;
192
193 class destructor TJsonObjectReader.Destroy;
194 begin
195   FreeAndNil(FJsonObjectReader);
196 end;
197
198 destructor TJsonObjectReader.Destroy;
199 begin
200   FreeAndNil(FStringReader);
201   inherited;
202 end;
203
204 class function TJsonObjectReader.NewReader(const AJson:string): TJsonObjectReader;
205 begin
206    if FJsonObjectReader <> nil then
207     FreeAndNil(FJsonObjectReader);
208
209   FJsonObjectReader := TJsonObjectReader.Create(AJson);
210
211   Result := FJsonObjectReader;
212 end;
213
214 end.

运行效果如图:

时间: 2024-10-24 08:45:20

Delphi 10 Seattle plus 新特性——System.JSON.Builders的相关文章

atitit.Oracle 9 10 11 12新特性attilax总结

atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. 其他(大部分是管理功能) 2 2. Oracle 12c 的 12 个新特性 2 2.1. 2 Improved Defaults 增强了DEFAULT, default目前可以直接指代sequence了,同时增强了default充当identity的能力 2 2.2. Easy Top-N an

Delphi 10 Seattle Update 1 修复 iOS HTTP 协定需求

在 iOS 9 Apple 加入了 HTTP 协议,还好有 TMS 提供快速修复工具,得以能顺利上架到 App Store. 现在 Delphi 10 Seattle Update 1 提供了这个设定功能,无需再使用 TMS 修复工具了,见下图:

delphi 10 seattle 安卓服务开发(一)

从delphi 开始支持安卓的开发开始, 安卓service 开发一直都是delphier 绕不过去的坎, 以前也有开发service  的方法,但是都是手工处理启动文件,而且要修改很多东西,基本上成功 的概率很低. delphi 10 seattle(这个名字很特殊,与win10 一样,直接跳过了9) 终于官方支持安卓service 开发了, 不知道现在现在开发安卓service 是不是很简单?那么就让我们一探究竟. 首先,我们开启已经扁平的不能再扁平delphi 10, 选择建立一个其他项目

Delphi 10 Seattle 发布到 iOS 6~8 闪退问题之解决方案

问题一:iOS 9 于 2015/09/16 开放下载了,但之前使用 Delphi 开发上架的 App 皆会闪退,无法运行在 iOS 9. 问题二:使用 Delphi 10 Seattle + Xcode 7.0 + iOS SDK 9.0 发布到 iOS 9 的真机没有问题,但发布到 iOS 6~8 的机子会闪退. 为了解决以上问题,可以参考下列方法(仅供参考,希望 EMB 能尽快提供 Delphi 10 Seattle 的 Hot Fix): 开发环境: 换回 Delphi XE8 upda

线程基础:JDK1.5+(10)——线程新特性(下)

(接上文<线程基础:JDK1.5+(9)--线程新特性(中)>) 3-4.CountDownLatch:同步器 上文中我们主要讲解了JDK1.5+中提供的一个重要工具:Semaphore信号量,并且用这个工具第一次实现了"100米赛跑"的需求.在第一次的实现中,我们还运用了"线程专栏"中已介绍的多个知识点,包括锁.线程池.队列.Callable接口等. 但实际上第一次实现的"100米赛跑"的需求,离我们真正的需求还有一定的距离:在我们

delphi 10 seattle 安卓服务开发(三)

delphi 10 里面的安卓服务有四种,上面的一篇文章里面的图有介绍. 今天做一个remote service 的例子.(里面一部分代码是抄别人的,如果不太清楚,自行恶补) remote service 实际上就是主程序包含服务模块,另外的一个程序可以调用. 由于delphi 10 的低级错误,需要手工修改一些东西.这一块可以参考http://blog.qdac.cc/?p=2839 为了不影响这个例子的顺利完成,本例中没有使用上面的修改.直接在本例中处理. 现在开工: 和以前一样,先建立一个

delphi 10 seattle 中 解决IOS 9 限制使用HTTP 服务问题

IOS 9 于17号早上正式开始推送,早上起来立马安装,这次升级包只有1G, 安装空间也大大降低(想起IOS 8 升级时,几乎把手机里面的东西删光了,满眼都是泪). 虽然安装后,网上几乎是铺天盖地的吐槽,但是如果不安装的话,拿什么吐呢?:) 回到正题,既然IOS 9出来了,那么前几天刚出来的delphi 10 会怎么想?是支持呢,还是不支持? 昨天晚上把所有的准备条件搞好(xcode7+ios 9 SDK). 把以前的几个程序重新编译发布,基本上没有问题,可以正常运行.以为大事已定.突然发现 原

Delphi 10.1 Berlin 与 Delphi 10 Seattle 共存

以下安装环境是win7 64位 1. 安装Delphi10.1 Berlin 版本. 2.修改C:\Program Files (x86)\Embarcadero\Studio\18.0\cglm.ini文件 [Embarcadero License Management]RootDir=${MODULE_DIR}\..LicenseDir=${ROOTDIR}\LicenseInfoDir=${COMMON_APPDATA}\Embarcadero\18\.licensesSlipDir=${

delphi 10 seattle 安卓服务开发(二)

关于delphi 10 移动服务开发的几张图