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的更多相关文章

  1. XE3随笔20:几个和当前路径相关的新函数

    偶然从 SysUtils 里发现了几个路径相关的函数, 以前没见过, 可能是 Delphi XE3 新增的: GetLocaleDirectory(); GetLocaleFile(); Locale ...

  2. XE3随笔9:使用不同的数据类型标记数组

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  3. XE3随笔6:SuperObject 的 JSON 对象中还可以包含 "方法"

    SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: IS ...

  4. XE3随笔3:访问

    测试数据提前加入 Memo1 中: { "name": "张三", /* 注释 */ "age": 33, "sex": ...

  5. Effective Java 11 Override clone judiciously

    Principles If you override the clone method in a nonfinal class, you should return an object obtaine ...

  6. XE3随笔21:系统默认语言与系统支持的语言列表

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  7. XE3随笔18:实例 - 解析 Google 关键字搜索排名

    同上例类似, 通过 'http://clients1.google.cn/complete/search?&q=' + "关键字" 可以获取 Google 的关键字搜索排名 ...

  8. XE3随笔19:实例 - 借用 Google 实现全文翻译

    调用 Google 翻译的地址格式: http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + ...

  9. XE3随笔17:实例 - 模拟 Google 搜索

    本例测试效果图: 代码文件: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics ...

随机推荐

  1. python学习-day12:列表、元祖、字典介绍和内置

    list:列表 >>>----可以被修改.修改成元素,元素可以使单独的数字,也可以是:新的list. 通过:链表..每个元素存储的时候,同时会指向下一个元素. 二.list编辑修改方 ...

  2. Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptabl

    在使用AFNetworking 2.0  的时候本来一切很顺畅,但是中途遇到几个比较坑的地方 这里分享一下爬坑经历,忘读者不能速爬坑! 在发送请求后,NSURLSessionDataTask一直报错 ...

  3. RabbitMQ介绍6 - 其它

    深入话题 Exchange实现路由的方法 http://www.rabbitmq.com/blog/2010/09/14/very-fast-and-scalable-topic-routing-pa ...

  4. java Util

    import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.qihangedu.tms.a ...

  5. Angular(1)

    1.设计原则 1.YAGNI  不要把未来需求引入当前工程   2.KISS  keep it simple and stupid  语义化标记 合理注释 符合规定的命名 3.DRY(don't re ...

  6. php操作文件及下载图片脚本

    <?php set_time_limit(0); $handle = fopen('article.txt','r'); for($i=0;$i<1;$i++) { $count = 0; ...

  7. WCF服务部署IIS

    一.将WCF服务部署到IIS上  [转载自简单笑容——http://www.cnblogs.com/skdsxx/p/5072726.html ] 1.首先检测电脑上是否安装了IIS,一般来说Win7 ...

  8. Haproxy+asp.net +RedisSessionStateProvider 完美实现负载均衡,并且session保持

    .net framework 4.5下测试成功,使用RedisSessionStateProvider 2.2.1保持session数据,通过Haproxy保持会话数据.首先在PM下安装RedisSe ...

  9. Good Bye 2013 A

    A. New Year Candles time limit per test 1 second memory limit per test 256 megabytes input standard ...

  10. FPGA Verilog HDL 系列实例--------步进电机驱动控制

    [连载] FPGA Verilog HDL 系列实例 Verilog HDL 之 步进电机驱动控制 步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心.那么,下面我 ...