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

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.
时间: 2024-08-05 10:24:12

XE3随笔6:SuperObject 的 JSON 对象中还可以包含 "方法"的相关文章

JSON对象转字符串的一些方法

将后台程序(如php)发送过来的json数据转化为javascript的数组或者对象的方法十分简单,代码如下: 1 // 假设后台发送的json数据为 '{a:2,b:1}' 存储于str中 2 var data = eval( '(' + str + ')' ); 然而想将一个javascript对象转化为json格式的字符串却并不那么简单,特别是对象的属性值递归包含一个对象时(如 var obj={a:[2,3],b:{m:[3,4],n:2} } ),那么有没有什么方法将obj转化为jso

Json对象中取Value值方式_jsonPath

=========方式一:关于json取key的Value值--- jsonPath 以这句代码为例: String token1= JSONPath.eval(JSON.parseObject(httpresponse), "$.access_token").toString(); 参数: JSON.parseObject(httpresponse)      转换成JSON的数据 $.access_token                                JSON 

json对象中的变量存在空格的取值办法

写一个json对象,但需求需要是带空格的键,定义的话很容易定义,只需要双引号引起来即可,但取值的时候怎么取,直接写 会报错,所以就有了下边的办法 <el-form-item label="活动名称"> <el-input v-model="form['miss name']"></el-input> </el-form-item> data() { return { form: { "miss name&qu

url地址数据参数转化JSON对象(js三种方法实现)

当我们用get方法提交表单时,在url上会显示出请求的参数组成的字符串,例如:http://localhost:3000/index.html?phone=12345678901&pwd=123123,在服务器端我们要获取其中的参数来进行操作,这种情况下,就要对请求过来的网址进行拆解了.下面将用3种方法实现: 1.js原生方法 思路:先通过split拆解?得到字符串phone=12345678901&pwd=123123   ,然后在通过split拆解&符号左右的字符串,最后再通过

访问对象中的属性与方法

访问对象中的属性: 引用名称.属性名称 访问对象中的方法: 引用名称.方法名称() 1 //第一步:编写类 2 class Student{ 3 //第二步:编写属性也叫做成员变量或实例(对象)变量 4 String name; //默认值为null 5 int age; //默认值为0 6 char sex; //默认值为\u0000 7 String address; //默认值为null 8 9 //第三步:编写方法 10 public void study(){ 11 System.ou

javascript的json对象中属性名使用uuid

例如: var a={848b2300c37b4cddb9c633fccb566e5c:"123"}; 浏览器会报错,大至意思是848b2300c37b4cddb9c633fccb566e5c不是一个合法的属性名. 看了半天也没看出什么来,是长度太长?非法字符? json官网上好像也没说这种不可以啊. 后来搜了一下javascript的变量命名规则,在javascript里变量的名称不能是数字开头,在uuid前面加一个字符就可以了,比如: var a={_848b2300c37b4cd

提取json对象中的数据,转化为数组

var xx1 = ["乐谱中的调号为( )调", "写出a自然小调音阶.", "以G为冠音,构写增四.减五音程.", "调式分析.", "将下列乐谱移为C大调.", "正确组合以下乐谱.", "以下乐谱应如何正确组合( )"]; var xx2 = {"0分":{"乐谱中的调号为( )调":"2",&quo

C# json对象中包含数组对象时,如何存入数据库

前端创建的的对象例如: C#端这样将数组提取出来存入 原文地址:https://www.cnblogs.com/sangzs/p/11558595.html

嵌套 JSON 对象中的数组使用 for-in 来循环访问每个数组

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <p>循环内嵌数组:</p> <p id="demo"></p> <script> var myObj, i, j