JSON 之 SuperObject(6): 方法
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): 方法相关推荐
- python中json模块_Python使用内置json模块解析json格式数据的方法
本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模 ...
- badatatable转成json_C# DataTable 转换成JSON数据 三种方法
在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List.DataTable转换为Json格式.特别在使用Extjs框架的时候,Ajax异步请求的数 ...
- python json转换字典_Python json转字典字符方法实例解析
josn基本操作 1.导入import json 2.字典转json:json.dumps(dict,ensure_ascii=False),加,ensure_ascii=False转换之后无中文乱码 ...
- python类定义中、对象字符串的特殊方法是_python中自定义类对象json字符串化的方法_python json转字符串、...
python中自定义类对象json字符串化的方法 1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): prin ...
- 【文件处理】——字典写入json文件或TXT文件,读取文件中的字典TypeError: Object of type ‘ndarray‘ is not JSON serializable错误解决方法
目录 一.将字典写入json文件 二.json文件中读取字典 三.将字典写入TXT文件中 四.从TXT中读取字典 五.解决字典含数组存入json文件失败的方法 1.存入前将数组变成列表 2.扩展类方法 ...
- layui 传递前端请求_Layui数据表格 前后端json数据接收的方法
先上效果图: 前端数据表格: 编号菜单名称菜单路径菜单图标菜单子菜单操作 编辑 删除 js代码 $(function () { //注意:这里是数据表格的加载数据,必须写 layui.use(['ta ...
- json对象合并的方法
求json对象合并的方法 var a ={"a":"1","b":"2"} var b ={"c": ...
- Dataset/Datatable/Datarow转Json的一种方法
//以下三句為轉Dataset/Datatable為Json格式的一般方法. System.Web.Script.Serialization.JavaScriptSerializer serial = ...
- ajax 通过json xml文件,php+Ajax处理xml与json格式数据的方法示例
本文实例讲述了php+Ajax处理xml与json格式数据的方法.分享给大家供大家参考,具体如下: 一.ajax如何处理xml数据格式 register.php 只需修改上一篇<php+Ajax ...
最新文章
- TensorFlow中Session.run和Tensor.eval的区别
- .net程序员转战android第一篇---环境部署
- element selection选中变颜色_Excel | 聚光灯效果(阅读模式)——改变当前行和列的颜色...
- javascript之闭包理解以及应用场景
- mysql数据库计算全部女生_使用mysql存储过程-统计某个数据库下的所有表的记录数...
- JS 字符串常用函数
- selenium模拟登陆时截取验证码
- 【动态规划】LeetCode 377. Combination Sum IV
- Python_骑士游历问题
- Android应用程序键盘(Keyboard)消息处理机制分析(7)
- 多线程访问导致崩溃一例
- Tableau新手入门教程
- android开发 多语言和国际化
- python爬取固定酒店评论_爬取携程上酒店评论数据
- 中国汽车市场的合资模式终究覆灭
- ros平台下python脚本控制机械臂运动
- 早期/天使科技投资逻辑
- 悼念王选:伟大发明家和失意企业家间的孤独者(2006.03.13 来自:IT时代周刊)
- Python微信远程控制摄像头-拍摄女朋友坐电脑前聊天时表情
- 【linux】Could not update ICEauthority file /home/xxx/.ICEauthority问题解决
热门文章
- 【Linux】一步一步学Linux——visudo命令(104)
- eja智能压力变送器工作原理_横河EJA压力变送器在脉冲线路堵塞诊断方法
- python小游戏代码_20行python代码的入门级小游戏
- 微信小程序接入腾讯地图sdk地图 用户自选位置。踩坑+代码实现
- linux 查看可执行文件动态链接库相关信息(转)
- HTTP协议学习笔记(一)请求方法名及状态码
- c#打包mysql配置文件_C#打包SQL数据库部署安装(转)
- Keil5.26、Keil5.27、Keil5.30下载地址
- PX4 - position_estimator_inav
- 概率论-3.1 多位随机变量及其联合分布