XE3随笔11:Merge、Clone、ForcePath
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
end; var
Form1: TForm1; implementation {$R *.dfm} uses SuperObject; //Merge 合并
procedure TForm1.Button1Click(Sender: TObject);
var
jo,jt: ISuperObject;
begin
jo := SO('{X:1}');
jt := SO('{Y:2}');
jo.Merge(jt);
ShowMessage(jo.AsJSon); // {"Y":2,"X":1}
//
jo := SO('{X:1, Y:2}');
jt := SO('{Y:3}');
jo.Merge(jt);
ShowMessage(jo.AsJSon); // {"Y":3,"X":1}
//
jo := SO('{X:1, Y:2}');
jt := SO('{Y:[5,6,7]}');
jo.Merge(jt);
ShowMessage(jo.AsJSon); // {"Y":[5,6,7],"X":1}
//
jo := SO('{A:{x:1, y:2}}');
jt := SO('{A:{m:3, n:4}}');
jo.Merge(jt, True);
ShowMessage(jo.AsJSon); // {"A":{"y":2,"x":1,"n":4,"m":3}}
end; //Clone 克隆
procedure TForm1.Button2Click(Sender: TObject);
var
jo,jt: ISuperObject;
begin
jo := SO('{A:{x:1, y:2, z:3}}');
jt := jo.Clone; jt.I['A.x'] := ;
jt.I['A.y'] := ;
jt.I['A.z'] := ; ShowMessage(jo.AsJSon); // {"A":{"z":3,"y":2,"x":1}}
ShowMessage(jt.AsJSon); // {"A":{"z":9,"y":8,"x":7}} //如果不是克隆
jo := SO('{A:{x:1, y:2, z:3}}');
jt := jo; jt.Delete('A.x');
jt.Delete('A.y'); ShowMessage(jo.AsJSon); // {"A":{"z":3}}
ShowMessage(jt.AsJSon); // {"A":{"z":3}}
end; //ForcePath 指向子对象
procedure TForm1.Button3Click(Sender: TObject);
var
jo,jt,ja: ISuperObject;
begin
jo := SO('{A:{x:1,y:2}, B:[]}'); {通过 ForcePath 可指向一个子对象; 当子对象修改时, 原对象当然也会修改, 本来就是同一个}
jt := jo.ForcePath('A');
jt.I['x'] := ;
ShowMessage(jo.AsJSon); // {"B":[],"A":{"y":2,"x":9}} {原对象修改, 当然子对象也会修改}
ja := jo.ForcePath('B', stArray);
jo.A['B'][] := SO('m');
jo.A['B'][] := SO('n');
ShowMessage(ja.AsJSon); // ["m","n"] {ISuperObject.ForcePath 和 ISuperObject.O[] 差不多, 只是后者是可读写的}
jo := SO('{A:{x:1,y:2}, B:[]}');
jt := jo.O['A']; //或简写为: jt := jo['A'];
jt.I['x'] := ;
ShowMessage(jo.AsJSon); // {"B":[],"A":{"y":2,"x":8}}
end; end.
XE3随笔11:Merge、Clone、ForcePath的更多相关文章
- XE3随笔20:几个和当前路径相关的新函数
偶然从 SysUtils 里发现了几个路径相关的函数, 以前没见过, 可能是 Delphi XE3 新增的: GetLocaleDirectory(); GetLocaleFile(); Locale ...
- XE3随笔9:使用不同的数据类型标记数组
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- XE3随笔6:SuperObject 的 JSON 对象中还可以包含 "方法"
SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: IS ...
- XE3随笔3:访问
测试数据提前加入 Memo1 中: { "name": "张三", /* 注释 */ "age": 33, "sex": ...
- Effective Java 11 Override clone judiciously
Principles If you override the clone method in a nonfinal class, you should return an object obtaine ...
- XE3随笔21:系统默认语言与系统支持的语言列表
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- XE3随笔18:实例 - 解析 Google 关键字搜索排名
同上例类似, 通过 'http://clients1.google.cn/complete/search?&q=' + "关键字" 可以获取 Google 的关键字搜索排名 ...
- XE3随笔19:实例 - 借用 Google 实现全文翻译
调用 Google 翻译的地址格式: http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + ...
- XE3随笔17:实例 - 模拟 Google 搜索
本例测试效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics ...
随机推荐
- php返回json,xml,JSONP等格式的数据
php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...
- Oracle正确删除archivelog文件(转)
from:http://www.itpub.net/thread-1636118-6-1.html Oracle在开启了归档模式后,会在指定的archive目录下产生很多的archivelog文件,而 ...
- css学习笔记(5)
<style>*{margin:0; padding:0;}ul{ list-style:none;}li{ height:30px; width:100px; background:#F ...
- elasticsearch auto delete old indices
定在crontab 每天执行 crontab -e * 2 * * * ~/autodelete.py Python 代码如下 #!/usr/bin/env python # encoding:utf ...
- 一、Owin Identity的使用
参照http://www.cnblogs.com/r01cn/p/5177708.html教程. 注意点: 1.Nuget包分别下载Microsoft.AspNet.Identity(Owin必须), ...
- No.6__C#
第六周 周一:今天特别开心,因为来公司的第一个任务完成了,虽然是在组长的帮助下完成的.但是,还是有很多收获,在实际工作中遇到的问题和麻烦远远超出了书本知识 有些问题简直让人抓狂.现在,上班空余期间,也 ...
- Data Science at the Command Line学习笔记(二)
1.vagrant建立简单httpserver方法: 1)映射端口 修改Vagrantfile, 末尾添加本地端口和虚机端口的映射关系, 然后执行vagrant reload. Vagrant::Co ...
- operator 的两种用法
C++,有时它的确是个耐玩的东东,就比如operator,它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换).1.操作符 ...
- QTP全选页面的复选框
Set glht= Browser("管理后台").Page("管理后台") Set Mydescription = description.Create()M ...
- 安装和使用memcached
引用:http://www.czhphp.com/archives/252 如何将 memcached 融入到您的环境中? 在开始安装和使用 using memcached 之前,我们需要了解如何将 ...