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 ...
随机推荐
- perl读取文件
1)文件读取的3中方法 按行读,存入标量 while (<FILE>) { print; } 按行读,存入数组 @array = <FILE>; 读入整个文件 ,存入标量 ...
- Install Slax on USB device (Slax U 盘安装)
Slax is a modern, portable, small and fast Linux operating system with a modular approach and outsta ...
- HoloLens开发笔记之Gesture input手势输入
手势是HoloLens三个首要输入形式之一.一旦你使用凝视定位了一个全息图像,手势允许你与它交互.手势输入允许你使用手或者点击器原生地与全息图像交互. 手势之外,你也可以在应用中使用语音输入来交互. ...
- socket测试远程地址能否连接并为连接设置超时
public class TestConnect { string hostIp = ""; ; public string recMsg = ""; Sock ...
- intellJ实用技巧
常用语句 在IntelJ中和Eclipse中稍有不同,在Eclipse中,输入main再按Alt+/即可自动补全main函数,但是在IntellJ中则是输入psvm. 在方法体内部有for循环,在In ...
- loadrunner 联机跑负载 win server 2012 r2环境部署
下列为在实际loadrunner 联机跑负载 win server 2012 r2环境部署中进行的成功案例,遇到的问题和解决方法,仅作整理和记录,如转载请署名及原文地址. ps:欢迎加q群872584 ...
- 【整理】更改MSSQL默认字符集
记录所有应用到 SQL Server 实例和当前排序规则的 Service Pack 和修补程序: SELECT SERVERPROPERTY('ProductVersion ') AS Produc ...
- java使用xsd校验xml样例
知识点:XSD文件是指XML结构定义 ( XML Schemas Definition )文件,是DTD的替代品.可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其 ...
- 【Python】python2.7安装pysvn
wget最新的版本地址自己修改 1.编译安装apr.apr-utilwget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.5.2.tar ...
- WinServer2008R2 部署.NET4.0程序 注意事项
部署注意事项: 1.IIS应用程序池 集成模式 2.在web.config中的system.webServer下,添加 <modules runAllManagedModulesForA ...