Delphi 10 Seattle plus 新特性——System.JSON.Builders
{
全能中间件 —— 简单、高效、稳定、安全的三层中间件
1.支持 多账套多数据库,包括SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere,Firebird等多种数据库。
2.支持 快速开发,封装了 TRFConnection 和 TRFDataSet 控件供客户端使用,传统两层应用轻松升级为三层应用。
3.支持 数据压缩、加密传输,效率和安全有保障。
4.支持 数据连接池,提高并发响应速度。
5.支持 客户端执行SQL语句,存储过程,亦可以把逻辑SQL放在中间层,控制权由您一手掌握。
6.支持 Delta更新,比传统的拼接SQL更新方式效率高,兼容性更好。
7.支持 SQL 参数化查询、 分页查询。
8.支持 多表事务更新,会保证数据的一致性。
9.支持 多表联合查询更新其中一个表。
10.支持 多平台开发(Windows/Android/iOS/OS X),各平台使用方法一致。
11.支持 7x24小时长时间稳定运行,已经过多个正式项目长时间考验。
Copyright @2014-2017 by QQ:64445322
All rights reserved.
QQ群:339616649
}
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.JSON.Writers, System.JSON.Types, System.JSON.Builders,
System.JSON.Readers, Vcl.StdCtrls;
type
TForm1 = class(TForm)
btnBuilder: TButton;
Memo1: TMemo;
btnReader: TButton;
Memo2: TMemo;
procedure FormCreate(Sender: TObject);
procedure btnBuilderClick(Sender: TObject);
procedure btnReaderClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//http://docwiki.embarcadero.com/RADStudio/Tokyo/en/JSON#JSON_Frameworks
TJSONBuilder = class(TJSONObjectBuilder)
private
FJsonWriter: TJsonTextWriter;
FStringWriter: TStringWriter;
FStringBuilder: TStringBuilder;
strict private
class var
FJsonBuilder: TJSONBuilder;
class destructor Destroy;
public
constructor Create(const AFormatting: TJsonFormatting = TJsonFormatting.None);
destructor Destroy; override;
function ToJSON: string;
class function NewBuilder(const AFormatting: TJsonFormatting = TJsonFormatting.None): TJSONBuilder; static;
end;
TJsonObjectReader = class (TJsonTextReader)
private
FStringReader : TStringReader;
strict private
class var
FJsonObjectReader: TJsonObjectReader;
class destructor Destroy;
public
constructor Create(const AJson: string);
destructor Destroy; override;
class function NewReader(const AJson:string): TJsonObjectReader; static;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnBuilderClick(Sender: TObject);
var
Builder: TJSONBuilder;
begin
Builder := TJSONBuilder.NewBuilder(TJsonFormatting.Indented);
Builder
.BeginObject
.BeginArray('Transaction')
.BeginObject.Add('id', )
.Add('firstName', 'John')
.Add('lastName', 'Doe')
.Add('price', 2.1)
.AddNull('parent_id')
.Add('validated', True)
.EndObject
.BeginObject
.Add('id', )
.Add('firstName', 'Anna')
.Add('lastName', 'Smith')
.Add('price', 4.5)
.AddNull('parent_id')
.Add('validated', False)
.EndObject
.BeginObject
.Add('id', )
.Add('firstName', 'Peter')
.Add('lastName', 'Jones')
.Add('price', 3.6)
.AddNull('parent_id')
.Add('validated', True)
.EndObject
.EndArray
.EndObject;
Memo1.Text := Builder.ToJSON;
end;
procedure TForm1.btnReaderClick(Sender: TObject);
var
Reader:TJsonObjectReader;
begin
Memo2.Clear;
Reader:=TJsonObjectReader.NewReader(Memo1.Text);
while Reader.Read do
case Reader.TokenType of
TJsonToken.PropertyName:
Memo2.Lines.Add(Reader.Value.AsString);
TJsonToken.String:
Memo2.Lines[Memo2.Lines.Count-] := Memo2.Lines[Memo2.Lines.Count-] + ': ' +Reader.Value.AsString;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ReportMemoryLeaksOnShutdown := True;
end;
{ TJSONBuilder }
constructor TJSONBuilder.Create(const AFormatting: TJsonFormatting);
begin
FJsonBuilder := nil;
FStringBuilder := TStringBuilder.Create;
FStringWriter := TStringWriter.Create(FStringBuilder);
FJsonWriter := TJsonTextWriter.Create(FStringWriter);
FJsonWriter.Formatting := AFormatting;
inherited Create(FJsonWriter);
end;
destructor TJSONBuilder.Destroy;
begin
FreeAndNil(FJsonWriter);
FreeAndNil(FStringWriter);
FreeAndNil(FStringBuilder);
inherited;
end;
class destructor TJSONBuilder.Destroy;
begin
FreeAndNil(FJsonBuilder);
end;
class function TJSONBuilder.NewBuilder(const AFormatting: TJsonFormatting): TJSONBuilder;
begin
if FJsonBuilder <> nil then
FreeAndNil(FJsonBuilder);
FJsonBuilder := TJSONBuilder.Create(AFormatting);
Result := FJsonBuilder;
end;
function TJSONBuilder.ToJSON: string;
begin
Result := FStringBuilder.ToString;
end;
{ TJsonObjectReader }
constructor TJsonObjectReader.Create(const AJson: string);
begin
FStringReader:= TStringReader.Create(AJson);
inherited Create(FStringReader) ;
end;
class destructor TJsonObjectReader.Destroy;
begin
FreeAndNil(FJsonObjectReader);
end;
destructor TJsonObjectReader.Destroy;
begin
FreeAndNil(FStringReader);
inherited;
end;
class function TJsonObjectReader.NewReader(const AJson:string): TJsonObjectReader;
begin
if FJsonObjectReader <> nil then
FreeAndNil(FJsonObjectReader);
FJsonObjectReader := TJsonObjectReader.Create(AJson);
Result := FJsonObjectReader;
end;
end.
运行效果如图:

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. ...
- Delphi 10 Seattle Update 1 修复 iOS HTTP 协定需求
在 iOS 9 Apple 加入了 HTTP 协议,还好有 TMS 提供快速修复工具,得以能顺利上架到 App Store. 现在 Delphi 10 Seattle Update 1 提供了这个设定 ...
- delphi 10 seattle 安卓服务开发(一)
从delphi 开始支持安卓的开发开始, 安卓service 开发一直都是delphier 绕不过去的坎, 以前也有开发service 的方法,但是都是手工处理启动文件,而且要修改很多东西,基本上成 ...
- delphi 10 Seattle 第一个Android程序
delphi 10 Seattle 第一个Android程序 1.打开Delphi RAD Studio Seattle,如下图 2.选择black application 点击OK 3. ...
- Delphi 10 Seattle 小票打印控件TQ_Printer
TQ_Printrer控件,是一个为方便需要控制打印命令而设计的跨平台专用控件,已包含标准ESC/POS打印控制的基本指令在内(这些基本指令已能很好的满足多数项目使用). TQ_Printrer控件让 ...
- (数据科学学习手札129)geopandas 0.10版本重要新特性一览
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...
- delphi 10 seattle 安卓服务开发(三)
delphi 10 里面的安卓服务有四种,上面的一篇文章里面的图有介绍. 今天做一个remote service 的例子.(里面一部分代码是抄别人的,如果不太清楚,自行恶补) remote servi ...
- ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出
ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...
- delphi 10 seattle 中 解决IOS 9 限制使用HTTP 服务问题
IOS 9 于17号早上正式开始推送,早上起来立马安装,这次升级包只有1G, 安装空间也大大降低(想起IOS 8 升级时,几乎把手机里面的东西删光了,满眼都是泪). 虽然安装后,网上几乎是铺天盖地的吐 ...
随机推荐
- The BEST way for YOU to learn English,https://www.youtube.com/watch?v=508wFMG9ZP4
opportunityoppositeappreciatesappropriate.approximate.approachcan't.seriesseriouscommon prettycasual ...
- 创建nextcloud所需的数据库和账户
创建 nextcloud 所需的数据库和账户 打开数据库管理命令行,默认root没密码,回车进入 sudo mysql -u root -p 创建 nextcloud 数据库,命令包含后面的分号 ...
- P2210 Haywire
P2210 Haywire 模拟退火练手题 #include<cmath> #include<ctime> #include<cstdio> #include< ...
- 第12组 Alpha冲刺(6/6)
Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...
- Linux 磁盘格式化、检验、挂载
分区完毕之后自然要进行文件系统的格式化.格式化命令mkfs(make file system)这个命令.这是个综合命令,它会去调用正确的文件系统格式化工具软件. 磁盘格式化 mkfs mke2fs m ...
- IOC注解方式1.0
在spring4之后,想要使用注解形式,必须得要引入aop的包 在配置文件当中,还得要引入一个context约束 <?xml version="1.0" encoding=& ...
- Service Function Chaining Resource Allocation: A Survey
摘要: 服务功能链(SFC)是未来Internet的一项关键技术. 它旨在克服当前部署模型的僵化和静态限制. 该技术的应用依赖于可以将SFC最佳映射到衬底网络的算法. 这类算法称为"服务功能 ...
- 监控指标 TP99 TP999 含义
TP=Top Percentile,Top百分数,是一个统计学里的术语,与平均数.中位数都是一类. TP50.TP90和TP99等指标常用于系统性能监控场景,指高于50%.90%.99%等百分线的情况 ...
- ERROR: source database "template1" is being accessed by other users
一开始,开发童鞋说他在测试环境没有创建数据库的权限.心想,不对呀,开发环境没有怎么做权限管控,明明给予授权了.上来一看: postgres=# CREATE DATABASE "abce&q ...
- mysql中的递归
别人问的一个需求: 数据库里面保存的是父子关系结构: 展示出来的需要根据子类一直查到顶类后将名称全部放一个字段里面,如下: 比如输入的code是1099,名称要显示 配料/花椒/ces ...