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

procedure Method(const This, Params: ISuperObject; var Result: ISuperObject);//另外, 这是其数据类型的枚举:
TSuperType = (stNull, stBoolean, stDouble, stInt, stObject, stArray, stString, stMethod);

测试代码:


unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Keyboard;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}uses SuperObject;//方法1; 参数列表是规定好的, 但这里没使用参数
procedure Method1(const This, Params: ISuperObject; var Result: ISuperObject);
beginShowMessage('Hello');
end;//方法2; 这里使用了第二个参数; 这里的第二个就是调用时的第一个
procedure Method2(const This, Params: ISuperObject; var Result: ISuperObject);
beginShowMessage(Params.AsJSon);
end;//方法3; 这里使用了第一个参数; 第一个参数值使用时无需传递, 它代表使用方法的对象本身
procedure Method3(const This, Params: ISuperObject; var Result: ISuperObject);
beginShowMessage(This.AsJSon);
end;//方法4; 这里使用了第三个参数; 这是调用时的返回值, 如果不给它赋值, 调用时将无返回值
procedure Method4(const This, Params: ISuperObject; var Result: ISuperObject);
beginResult := This;Result.Merge(Params, True); {合并}
end;//第一种使用方法
procedure TForm1.Button1Click(Sender: TObject);
varjo: ISuperObject;
beginjo := SO('{"X":"Y"}');jo.M['jm1'] := @Method1;jo.M['jm2'] := @Method2;jo.M['jm3'] := @Method3;jo.M['jm4'] := @Method4;jo.call('jm1');                      // Hellojo.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);
vart,jo: ISuperObject;
beginjo := SO('{"X":"Y"}');jo.M['jm1'] := @Method1;jo.M['jm2'] := @Method2;jo.M['jm3'] := @Method3;jo.M['jm4'] := @Method4;jo['jm1()'];                           // Hellojo['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.

转载于:https://www.cnblogs.com/cpprun/p/4787963.html

JSON 之 SuperObject(6): 方法相关推荐

  1. python中json模块_Python使用内置json模块解析json格式数据的方法

    本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模 ...

  2. badatatable转成json_C# DataTable 转换成JSON数据 三种方法

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

  3. python json转换字典_Python json转字典字符方法实例解析

    josn基本操作 1.导入import json 2.字典转json:json.dumps(dict,ensure_ascii=False),加,ensure_ascii=False转换之后无中文乱码 ...

  4. python类定义中、对象字符串的特殊方法是_python中自定义类对象json字符串化的方法_python json转字符串、...

    python中自定义类对象json字符串化的方法 1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): prin ...

  5. 【文件处理】——字典写入json文件或TXT文件,读取文件中的字典TypeError: Object of type ‘ndarray‘ is not JSON serializable错误解决方法

    目录 一.将字典写入json文件 二.json文件中读取字典 三.将字典写入TXT文件中 四.从TXT中读取字典 五.解决字典含数组存入json文件失败的方法 1.存入前将数组变成列表 2.扩展类方法 ...

  6. layui 传递前端请求_Layui数据表格 前后端json数据接收的方法

    先上效果图: 前端数据表格: 编号菜单名称菜单路径菜单图标菜单子菜单操作 编辑 删除 js代码 $(function () { //注意:这里是数据表格的加载数据,必须写 layui.use(['ta ...

  7. json对象合并的方法

    求json对象合并的方法 var a ={"a":"1","b":"2"} var b ={"c": ...

  8. Dataset/Datatable/Datarow转Json的一种方法

    //以下三句為轉Dataset/Datatable為Json格式的一般方法. System.Web.Script.Serialization.JavaScriptSerializer serial = ...

  9. ajax 通过json xml文件,php+Ajax处理xml与json格式数据的方法示例

    本文实例讲述了php+Ajax处理xml与json格式数据的方法.分享给大家供大家参考,具体如下: 一.ajax如何处理xml数据格式 register.php 只需修改上一篇<php+Ajax ...

最新文章

  1. TensorFlow中Session.run和Tensor.eval的区别
  2. .net程序员转战android第一篇---环境部署
  3. element selection选中变颜色_Excel | 聚光灯效果(阅读模式)——改变当前行和列的颜色...
  4. javascript之闭包理解以及应用场景
  5. mysql数据库计算全部女生_使用mysql存储过程-统计某个数据库下的所有表的记录数...
  6. JS 字符串常用函数
  7. selenium模拟登陆时截取验证码
  8. 【动态规划】LeetCode 377. Combination Sum IV
  9. Python_骑士游历问题
  10. Android应用程序键盘(Keyboard)消息处理机制分析(7)
  11. 多线程访问导致崩溃一例
  12. Tableau新手入门教程
  13. android开发 多语言和国际化
  14. python爬取固定酒店评论_爬取携程上酒店评论数据
  15. 中国汽车市场的合资模式终究覆灭
  16. ros平台下python脚本控制机械臂运动
  17. 早期/天使科技投资逻辑
  18. 悼念王选:伟大发明家和失意企业家间的孤独者(2006.03.13 来自:IT时代周刊)
  19. Python微信远程控制摄像头-拍摄女朋友坐电脑前聊天时表情
  20. 【linux】Could not update ICEauthority file /home/xxx/.ICEauthority问题解决

热门文章

  1. 【Linux】一步一步学Linux——visudo命令(104)
  2. eja智能压力变送器工作原理_横河EJA压力变送器在脉冲线路堵塞诊断方法
  3. python小游戏代码_20行python代码的入门级小游戏
  4. 微信小程序接入腾讯地图sdk地图 用户自选位置。踩坑+代码实现
  5. linux 查看可执行文件动态链接库相关信息(转)
  6. HTTP协议学习笔记(一)请求方法名及状态码
  7. c#打包mysql配置文件_C#打包SQL数据库部署安装(转)
  8. Keil5.26、Keil5.27、Keil5.30下载地址
  9. PX4 - position_estimator_inav
  10. 概率论-3.1 多位随机变量及其联合分布