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[;
  jt.I[;
  jt.I[;

  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[;
  ShowMessage(jo.AsJSon); // {"B":[],"A":{"y":2,"x":9}}

  {原对象修改, 当然子对象也会修改}
  ja := jo.ForcePath('B', stArray);
  jo.A[] := SO('m');
  jo.A[] := 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[;
  ShowMessage(jo.AsJSon); // {"B":[],"A":{"y":2,"x":8}}
end;

end.

JSON 之 SuperObject(10): Merge、Clone、ForcePath的更多相关文章

  1. JSON 之 SuperObject(11): TSuperTableString、TSuperAvlEntry

    JSON 之 SuperObject(11): TSuperTableString.TSuperAvlEntry - 万一 - 博客园http://www.cnblogs.com/del/archiv ...

  2. JSON 之 SuperObject(6): 方法

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

  3. JSON 之 SuperObject(8): 关于乱码的几种情况 - 向 Henri Gourvest 大师报告

    这几天学习 JSON - SuperObject, 非常幸运地得到了其作者 Henri Gourvest 大师的同步指点! (Henri 大师也是 DSPack 和 GDI+ 头文件的作者; 大师是法 ...

  4. JSON 之 SuperObject(7): 可以省略的双引号

    在 JSON 中, 字符串应该在双引号中; 从上个例子才发现: 原来这个双引号可以省略, 有空格都行 当然只是在程序代码中可以省略, 对象会自动识别添加的. 即如此, 下面写法都可以: uses Su ...

  5. JSON 之 SuperObject(5): Format 与转义字符

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

  6. JSON 之 SuperObject(2): 构建方式与 AsJSon

    SuperObject 构建一个 JSON 的常用方法: 从字符串.从文件.从流. unit Unit1; interface uses   Windows, Messages, SysUtils, ...

  7. JSON 之 SuperObject(1)

    一直盼着 Delphi 能够直接支持 "正则表达式" 与 "JSON"; Delphi 2009 刚来的时候, 有了 JSON, 但不好, 那时尝试过一点. 这 ...

  8. dojo 官方翻译 dojo/json 版本1.10

    官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/json.html#dojo-json require(["dojo/json&q ...

  9. JSON 之 SuperObject(9): TSuperType

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

随机推荐

  1. 连接ACCESS 数据库不能使用 '';文件已在使用中。

    错误类型:  Microsoft JET Database Engine (0x80004005)  不能使用 '':文件已在使用中. 对数据库的操作完之后,要 conn.close() 错误原因:解 ...

  2. mac mysql connection

    随着网络日益发展还有os x用户的增多,有可能会需要在自己的x系统中运行mysql+php环境,比如架设网站或者测试之类.简单步骤如下: 1.下载MySQL 5.x 发行版,解压并安装映像中的两个安装 ...

  3. JQuery表单验证插件EasyValidator,超级简单易用!

    本插件的宗旨是:用户无需写一行JS验证代码,只需在要验证的表单中加入相应的验证属性即可,让验证功能易维护,可扩展,更容易上手. DEMO中已经包含了常用的正则表达式,可以直接复用,为了考虑扩展性,所以 ...

  4. Sqli-labs less 31

    Less-31 Less-31与上述两个例子的方式是一样的,我们直接看到less-31的sql语句: 所以payload为: http://127.0.0.1:8080/sqli-labs/Less- ...

  5. ASP.NET母版页与内容页相对路径的问题

    1. 图片问题 图片显示问题:<img runat="server" src="~/images/ad468x60.gif" alt="&quo ...

  6. CRF++中文分词使用指南

    http://blog.csdn.net/marising/article/details/5769653 前段时间写了中文分词的一些记录里面提到了CRF的分词方法,近段时间又研究了一下,特把方法写下 ...

  7. delphi的socket通讯 多个客户端 (转)

    ClientSocket组件为客户端组件.它是通信的请求方,也就是说,它是主动地与服务器端建立连接. ServerSocket组件为服务器端组件.它是通信的响应方,也就是说,它的动作是监听以及被动接受 ...

  8. 学生信息管理 --- c语言实现

    第一次写比较大的程序,昨晚看了  大话数据结构  有感-----同样求 1+2+3+4+...+100,我则是简单的从1+2+3+4+...+100. 而不是 (1+100) / 2 * 100;(高 ...

  9. C#实现文件增量备份

    最近将客户的一个ASP网站部署到了公司的机房云服务器上,该ASP网站的文件总容量已有将近4GB. 虽然现在硬盘容量很大,但每天一次完整备份的话,那占用的硬盘空间会急剧上升,考虑一个更优的备份方案就是每 ...

  10. Java框架----SSH整合回顾

    1,新建工程,类型为Web Project,设置默认编码为UTF-8,并创建如下文件夹 1,Source Folder 1,src 项目源码 2,config 配置文件 3,test 单元测试 2,普 ...