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 升级时,几乎把手机里面的东西删光了,满眼都是泪). 虽然安装后,网上几乎是铺天盖地的吐 ...
随机推荐
- Tensorflow细节-P309-监控指标可视化
注意下面一个点就ok了 with tf.name_scope('input_reshape'): # 注意看这里,图片的生成 image_shaped_input = tf.reshape(x, [- ...
- RaiseFailFastException函数
引发绕过所有异常处理程序(基于帧或矢量)的异常.引发此异常将终止应用程序并调用Windows错误报告(如果Windows错误报告正在运行). 原型: VOID WINAPI RaiseFailFast ...
- Truffle - 以太坊Solidity编程语言开发框架
http://truffle.tryblockchain.org/ Truffle框架 Truffle是什么? Truffle是针对基于以太坊的Solidity语言的一套开发框架. 本身基于JavaS ...
- SVN 常用 还原项目
1.先修改本来两个文件,然后再提交到SVN 2.在日志界面,查看提交的文件,找到对应的版本号 3.找到对应的版本号(这里的版本号是1995,我提交生成的版本号 的前一个版本 才是我未作出修改的版本), ...
- I Count Two Three(打表+排序+二分查找)
I Count Two Three 二分查找用lower_bound 这道题用cin,cout会超时... AC代码: /* */ # include <iostream> # inclu ...
- array.includes的使用
看看某个值在不在这个数组里面,是个完整的数 var array1 = [1, 2, 3]; console.log(array1.includes(2)); // expected output: t ...
- 帝国cms更换Ueditor编辑器上传图片加水印
Ueditor安装包,里面有个/php/文件夹,找到Uploader.class.php,这是通用上传类文件找到private function upFile(),这是上传文件的主处理方法,找到122 ...
- GIT 使用记录,新手->会用(mac 用户)
(唔,mac 用户这个要求是因为集成在 terminal 中可直接使用) 1. github 中 创建 git 账户 2. github -> 在个人设置中 找到 ssh and GPGkey ...
- 第10组 Alpha冲刺(5/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 学习调用中国天气网API,接近实现天气推送功能 对天气推送的形式进行讨论及重确 ...
- 剑指offer:数组中的逆序对
题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%100 ...