{
全能中间件 —— 简单、高效、稳定、安全的三层中间件 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的更多相关文章

  1. 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. Delphi 10 Seattle Update 1 修复 iOS HTTP 协定需求

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

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

    从delphi 开始支持安卓的开发开始, 安卓service 开发一直都是delphier 绕不过去的坎, 以前也有开发service  的方法,但是都是手工处理启动文件,而且要修改很多东西,基本上成 ...

  4. delphi 10 Seattle 第一个Android程序

    delphi 10 Seattle 第一个Android程序 1.打开Delphi RAD Studio Seattle,如下图     2.选择black application 点击OK   3. ...

  5. Delphi 10 Seattle 小票打印控件TQ_Printer

    TQ_Printrer控件,是一个为方便需要控制打印命令而设计的跨平台专用控件,已包含标准ESC/POS打印控制的基本指令在内(这些基本指令已能很好的满足多数项目使用). TQ_Printrer控件让 ...

  6. (数据科学学习手札129)geopandas 0.10版本重要新特性一览

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...

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

    delphi 10 里面的安卓服务有四种,上面的一篇文章里面的图有介绍. 今天做一个remote service 的例子.(里面一部分代码是抄别人的,如果不太清楚,自行恶补) remote servi ...

  8. ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出

    ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...

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

    IOS 9 于17号早上正式开始推送,早上起来立马安装,这次升级包只有1G, 安装空间也大大降低(想起IOS 8 升级时,几乎把手机里面的东西删光了,满眼都是泪). 虽然安装后,网上几乎是铺天盖地的吐 ...

随机推荐

  1. LeetCode 1049. Last Stone Weight II

    原题链接在这里:https://leetcode.com/problems/last-stone-weight-ii/ 题目: We have a collection of rocks, each ...

  2. jar包更新

    打包新的jar包 java -jar xx.jar 本地测试后 删除旧的jar包 然后要重启jar包

  3. 【洛谷P4931】 情侣?给我烧了!(加强版)组合计数

    挺有意思的一道题... code: #include <bits/stdc++.h> using namespace std; #define N 5000006 #define mod ...

  4. WinDbg常用命令系列---反汇编u*

    u, ub, uu (Unassemble) u*命令显示内存中指定程序代码的汇编转换.不要将此命令与~u(解冻线程)命令混淆. u[u|b] Range u[u|b] Address u[u|b] ...

  5. yugabyte docker-compose 运行试用

    以前运行yugabyte 使用的是yb-docker-ctl,现在直接可以方便的使用docker-compose 运行了 pull image docker pull yugabytedb/yugab ...

  6. [BZOJ1191]超级英雄Hero

    Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的 多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确 ...

  7. 设计模式——<面向对象设计原则以及23种设计模式分类>

    一.面向对象八大设计原则: 1.依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) . 抽象(稳定)不应该依赖于实现细节(变化) ,实现细节应该依赖于抽 ...

  8. springboot带有进度条的上传

    一.说明 最近要做文件上传,在网上找了很久都没有一个全面的示例,特此记录下来分享给大家. 1.文件上传接口可按照springboot默认实现,也可用commons-fileupload组件,本示例使用 ...

  9. HBase(一) —— 基本概念及使用

    一.安装&启动 下载 https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.1.8/ 快速开始文档,HBase2.1.8 http://hba ...

  10. firewall防火墙常用操作

    # firewall防火墙常用操作 - 启动```systemctl start firewalld```- 停止```systemctl stop firewalld```- 重启```system ...