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 升级时,几乎把手机里面的东西删光了,满眼都是泪). 虽然安装后,网上几乎是铺天盖地的吐 ...
 
随机推荐
- SpringCloud过滤filter
			
目录 配置文件 application.yml eureka: client: service-url: defaultZone: http://localhost:8001/eureka serve ...
 - solidworks 学习 (三)
			
汽车轮毂三维建模
 - gitbase 集成sqler 进行git 代码分析
			
gitbase 是一个方便的git sql 查询引擎,sqler 是一个很不错的sql 转rest api工具,以下是一个简单的集成测试 项目使用docker-compose 运行 环境准备 do ...
 - 73: luogu 2014 树形dp
			
$des$ 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有 ...
 - 洛谷 P3884 [JLOI2009]二叉树问题
			
目录 题目 思路 \(Code\) 题目 P3884 [JLOI2009]二叉树问题 思路 深搜统计深度,倍增\(\text{LCA}\)求边数 \(Code\) #include<iostre ...
 - 使用chrome浏览器调试移动端网页(非模拟访问)
			
1. 使用数据线连接手机与电脑 2. 打开手机调试模式 参考:http://jingyan.baidu.com/article/f79b7cb35ada4d9145023e63.html 本人使用的m ...
 - Xilinx ISE中使用Synplify综合报错的原因
			
在Xilinx ISE中使用Synopsys Synplify 综合比较方便,但有时会出现如下错误: "ERROR:NgdBuild: - logical block ' ' with ty ...
 - sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock
			
原因:历史软件(包)更新(安装)未完成就退出了系统 解决办法:杀死该进程 sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock ...
 - 使用建造者模式和Lombok简化代码
			
在项目开发中,我们经常需要构建对象.常见的做法有getter/setter,或者构造器构建对象. 可能会有人写出类似如下的代码: Company company=new Company(); comp ...
 - hdu4841 圆桌问题[STL vector]
			
目录 题目地址 题干 代码和解释 参考 题目地址 hdu4841 题干 代码和解释 解本题时使用了刚学的STL vector,注意hdu不支持万能头文件#include<bits/stdc++. ...