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 ...
随机推荐
- error while loading shared libraries:错误的原因和解决方法
原因有两个: 1.操作系统没有改共享库 2.安装了该共享库,但是执行外部程序调用该共享库的时候,程序按照默认路径(/usr/lib./lib)找不到该共享库文件 解决方法: ubuntu系统的共享库一 ...
- SwipeRefreshLayout和RecyclerView滑动冲突的解决
做了个项目,用了support包里的SwipeRefreshLayout和RecyclerView.两者一起使用有一点点小问题,有时候拉着拉着,列表还没拉玩就出来刷新的图标了,在华为荣耀上尤为明显. ...
- Oracle数据库的后备和恢复————关于检查点的一些知识
当我们使用一个数据库时,总希望数据库的内容是可靠的.正确的,但由于计算机系统的故障(硬件故障.软件故障.网络故障.进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使 ...
- Visual Studio 2015里面汇编工具Asm Dude的配置!
最近开始学习汇编,也开始使用Visual Studio 2015写汇编程序,比较了半天,最后觉得Asm Dude应该是目前Visual Studio 2015非常好的汇编开发插件了,但是如果默认安装上 ...
- CyclicBarrier类合唱演绎
package a.jery; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorServi ...
- git学习系列--六分之一
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统,可以对任何类型的文件进行版本控制. 细说分布式版本控制系统 在这类系统中,像 Git,Mercurial,Bazaar 以 ...
- JMeter压力测试以文件的形式
JMeter压力测试入门教程[图文] 1. 下载JMeter 2. 启动JMeter 3. 运行预准备 4. 运行 文章目录 Apache JMeter是Apache组织开发的基于Java的压力测试工 ...
- html和css基础
背景: 最近公司开发BS架构的项目,公司主要业务也不是做BS开发的,没有项目经理,没有美工,没有前端,界面丑的不要不要的,哈哈哈 然后咧,使用asp.net用着用着,技术老大觉得界面怎么可以这么丑,不 ...
- 使用imap协议接收邮件
之前一直使用PHPMail类进行发送邮件,这个是一个非常强大的类,但是其实底层就是使用mail()函数来进行发送的. 但是现在公司有个需求是 写个程序需要实时的接收邮件,主要是判断邮件发出去了,并且 ...
- VS2010 "error MSB8011” 解决方法
http://blog.csdn.net/heihei36/article/details/8923971 —————————————————————————————————————————————— ...