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 ...
随机推荐
- 五、Spring ——单元测试
1.JUnit4 JUnit测试用例的完整生命周期要经历一下阶段:类级初始化资源处理,方法级初始化资源处理.执行测试用例中的方法.方法级销毁资源处理.类级销毁资源处理. 测试方法 @Test 初始化 ...
- Sublime Text 3 插件安装及Vim 模式设置
1.安装Sublime Text 3 下载安装:http://www.sublimetext.com/3 Package Control安装:https://sublime.wbond.net/in ...
- 浏览器收藏夹插件-Xmarks
Xmarks 一一 一款简约实用的浏览器书签同步插件 首先还是想吐槽一下firefox的收藏夹同步功能,感觉不实用,密钥的长度如果不是存到手机或者别的终端,压根没办法实现同步. 而且还区分了,如果两台 ...
- Intellij Idea系列之Tomcat环境的搭建(三)
Intellij Idea系列之Tomcat环境的搭建(三) 一. 编写背景 Intellij Idea在刚上手的时候很多人吐槽,"god, 这么难用的IDE有谁用呀?",的确,I ...
- [Tex学习笔记]数学公式再次测试
\begin{align*}\sum_{n=0}^{\infty}\frac{(n!)^{2}2^{n+1}}{(2n+1)!}&=\sum_{n=0}^{\infty}\int_{0}^{1 ...
- MessageBox
首先要知道MessageBox返回的值为DialogResult类型.返回值可能有如下: DialogResult.OK //点击“确定”按钮后返回的值 DialogResult.YES //点击 ...
- 玩转单元测试之WireMock -- Web服务模拟器
玩转单元测试之WireMock -- Web服务模拟器 WireMock 是一个灵活的库用于 Web 服务测试,和其他测试工具不同的是,WireMock 创建一个实际的 HTTP服务器来运行你的 We ...
- html doctype 作用介绍
文档模式主要有以下两个作用: 1.告诉浏览器使用什么样的html或xhtml规范来解析html文档 2.对浏览器的渲染模式产生影响:不同的渲染模式会影响到浏览器对于 CSS 代码甚至 JavaScri ...
- CSS子元素居中(父元素宽高已知,子元素未知)
<style> .container{width:400px; height:400px; position:relative;} .center{position:absolute; l ...
- 【转】git push 出现401 错误
错误信息:error: The requested URL returned error: 401 Unauthorized while accessing https://git.oschina.n ...