SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是:

procedure Method(const This, Params: ISuperObject; var Result: ISuperObject);

//另外, 这是其数据类型的枚举:
TSuperType = (stNull, stBoolean, stDouble, stInt, stObject, stArray, stString, stMethod);

测试代码:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Keyboard;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses SuperObject;

//方法1; 参数列表是规定好的, 但这里没使用参数
procedure Method1(const This, Params: ISuperObject; var Result: ISuperObject);
begin
  ShowMessage('Hello');
end;

//方法2; 这里使用了第二个参数; 这里的第二个就是调用时的第一个
procedure Method2(const This, Params: ISuperObject; var Result: ISuperObject);
begin
  ShowMessage(Params.AsJSon);
end;

//方法3; 这里使用了第一个参数; 第一个参数值使用时无需传递, 它代表使用方法的对象本身
procedure Method3(const This, Params: ISuperObject; var Result: ISuperObject);
begin
  ShowMessage(This.AsJSon);
end;

//方法4; 这里使用了第三个参数; 这是调用时的返回值, 如果不给它赋值, 调用时将无返回值
procedure Method4(const This, Params: ISuperObject; var Result: ISuperObject);
begin
  Result := This;
  Result.Merge(Params, True); {合并}
end;

//第一种使用方法
procedure TForm1.Button1Click(Sender: TObject);
var
  jo: ISuperObject;
begin
  jo := SO('{"X":"Y"}');
  jo.M['jm1'] := @Method1;
  jo.M['jm2'] := @Method2;
  jo.M['jm3'] := @Method3;
  jo.M['jm4'] := @Method4;

  jo.call('jm1');                      // Hello

  jo.call('jm2', SO('{"A":"B"}'));     // {"A":"B"}
  jo.call('jm2', '{"A":"B"}');         // {"A":"B"}

  jo.call('jm3');                      // {"X":"Y"}

  jo.call('jm4', '{"B":null}');
  ShowMessage(jo.AsJSon);              // {"X":"Y","B":null}
end;

//第二种使用方法
procedure TForm1.Button2Click(Sender: TObject);
var
  t,jo: ISuperObject;
begin
  jo := SO('{"X":"Y"}');
  jo.M['jm1'] := @Method1;
  jo.M['jm2'] := @Method2;
  jo.M['jm3'] := @Method3;
  jo.M['jm4'] := @Method4;

  jo['jm1()'];                           // Hello

  jo['jm2(' + '{"A":"B"}' + ')'];        // {"A":"B"}
  jo['jm2({A:B})'];                      // {"A":"B"}

  jo['jm3()'];                           // {"X":"Y"}

  jo['jm4(' + '{"B":null}' + ')'];
  ShowMessage(jo.AsJSon);                // {"X":"Y","B":null}
end;

end.

JSON 之 SuperObject(6): 方法的更多相关文章

  1. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  2. 使用Python解析JSON数据的基本方法

    这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下:     ----------------------------------- ...

  3. JMeter中返回Json数据的处理方法

    Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...

  4. 【jmeter】JMeter中返回Json数据的处理方法

    Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...

  5. JAVA写JSON的三种方法,java对象转json数据

    JAVA写JSON的三种方法,java对象转json数据 转自:http://www.xdx97.com/#/single?bid=5afe2ff9-8cd1-67cf-e7bc-437b74c07a ...

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

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

  7. JMeter中返回Json数据的处理方法(转)

    Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...

  8. JMeter 中对于Json数据的处理方法

    JMeter中对于Json数据的处理方法 http://eclipsesource.com/blogs/2014/06/12/parsing-json-responses-with-jmeter/ J ...

  9. AJAX跨域请求json数据的实现方法

    这篇文章介绍了AJAX跨域请求json数据的实现方法,有需要的朋友可以参考一下 我们都知道,AJAX的一大限制是不允许跨域请求. 不过通过使用JSONP来实现.JSONP是一种通过脚本标记注入的方式, ...

随机推荐

  1. HDU1048The Hardest Problem Ever

    The Hardest Problem Ever Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  2. setTimeout(f, 0)的应用&利用Deferred实现队列运行

    任务:从mongodb中导出csv数据,输出内容如下userid username usergender points points表: { "userid" : 1022, &q ...

  3. BeanUtils No value specified for Date的解决方法

    /** * ConversionException: No value specified for Date的解决方法 */ ConvertUtils.register(new DateConvert ...

  4. js-jQuery对象与dom对象相互转换

    http://blog.csdn.net/jueshengtianya/article/details/8823091   核心提示:jquery选择器得到的jquery对象和标准的 javascri ...

  5. MySQL数据库优化总结

    对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要.一般来说,要保证数据库的效率,要做好以下四个方面的工作:数 据库设计.sql语句优化.数据库参数配置.恰当的硬件资 ...

  6. [Sharepoint]备份 迁移 还原

    在sharepoint 的备份当中,一般分为一个sharepoint 站点的备份和sharepoint 整个站点的备份.我们可以用sharepoint designer 进行备份, 也可以用 stsa ...

  7. 用eclipse创建maven项目

    Maven是基于项目对象模型(POM),也可以进行模块化开发.并且是个强大的管理工具.本经验用eclipse来创建maven项目 步骤: 1.下载并正确安装eclipse 2.在eclipse上成功安 ...

  8. mysql 连接数的最大数

    mysql默认最大连接数是100,增加加默认MYSQL连接数的方法有两个 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini(windows) 或 my.cnf(linux环境)查找 ...

  9. C#反射Assembly 详细说明

    1.对C#反射机制的理解2.概念理解后,必须找到方法去完成,给出管理的主要语法3.最终给出实用的例子,反射出来dll中的方法 反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等 ...

  10. 开始使用Mac OS X——写给Mac新人

    本文转自博客园:http://www.cnblogs.com/chijianqiang/archive/2011/08/03/2126593.html 写这篇文档的原因有两个,一.身边使用Mac的朋友 ...