unit SuperObjectCase; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, superobject, Buttons; type TSuperObjectCaseFrm = class(TForm) mmo1: TMemo; btn1: TButton; btn2: TButton; btn3: TButton; btn4: TButton; btn5: TButton; btn6: TBitBtn; btn7: TBitBtn; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); procedure btn3Click(Sender: TObject); procedure btn4Click(Sender: TObject); procedure btn5Click(Sender: TObject); procedure btn6Click(Sender: TObject); procedure btn7Click(Sender: TObject); private function GetServerID(ALoginName: string): string; function GetAndClearServerID(var ALoginName: string): string; function RemoverBridgeServerID(ALoginName: string): string; { Private declarations } public { Public declarations } end; var SuperObjectCaseFrm: TSuperObjectCaseFrm; implementation {$R *.dfm} var TestJsonStr: string = '{"s":"0"' + '"bs" : {' + '"1" : [{"l":"lslqq", "v":1}, {"l":"lslqq", "v":1}],' + '"2" : [{"l":"lssfbcjf", "v":1}, {"l":"lssfbcjf", "v":1}]' + '} ' + '}'; NewProtocol: string = '["g.create.r":{"id":"","ret":0,"group":{"id":"6d54247063414c99a7bb4ddc8b7a24bb","name":"ѧϰȺ"}}]'; procedure TSuperObjectCaseFrm.btn1Click(Sender: TObject); var jo: TSuperObject; ja: TSuperArray; begin jo := TSuperObject.Create(stArray); ja := jo.AsArray(); ja.S[0] := 'lqq'; ja.S[1] := 'baidu'; mmo1.Lines.Add(jo.AsJSon()); end; procedure TSuperObjectCaseFrm.btn2Click(Sender: TObject); var l: string; begin l := '0578+0-lslqq'; mmo1.Lines.Add(GetAndClearServerID(l)); mmo1.Lines.Add(l); l := '0-lslqq'; mmo1.Lines.Add(GetAndClearServerID(l)); mmo1.Lines.Add(l); l := 'lslqq'; mmo1.Lines.Add(GetAndClearServerID(l)); mmo1.Lines.Add(l); end; procedure TSuperObjectCaseFrm.btn3Click(Sender: TObject); var jobs, jo1: ISuperObject; ja: TSuperArray; item: TSuperAvlEntry; iLoop: Integer; S: string; begin jobs := SO(TestJsonStr).O['bs']; s := SO(TestJsonStr).S['s']; for item in jobs.AsObject do begin mmo1.Lines.Add(item.Name); ja := item.Value.AsArray; mmo1.Lines.Add(item.Value.AsJSon()); for iLoop := 0 to ja.Length - 1 do begin mmo1.Lines.Add(ja[iLoop].S['l'] + ':' + ja[iLoop].S['v']); end; end; end; procedure TSuperObjectCaseFrm.btn4Click(Sender: TObject); var jo: ISuperObject; begin jo := SO(); jo.N['arr'] := SO('[]'); jo.A['arr'].Add('12312'); jo.B['True'] := True; jo.B['False'] := False; mmo1.Lines.Add(jo.AsJSon()); end; procedure TSuperObjectCaseFrm.btn5Click(Sender: TObject); begin mmo1.Lines.Add(RemoverBridgeServerID('0578+0-lqq')); mmo1.Lines.Add(RemoverBridgeServerID('0-lqq')); mmo1.Lines.Add(RemoverBridgeServerID('+0-lqq')); end; procedure TSuperObjectCaseFrm.btn6Click(Sender: TObject); var jo: ISuperObject; begin jo := SO(NewProtocol); if jo <> nil then begin mmo1.Lines.Add(jo.AsJSon()); end; end; function TSuperObjectCaseFrm.GetServerID(ALoginName: string): string; var iStart, iEnd, Len: Integer; begin Result := ''; iEnd := AnsiPos('-', ALoginName); if iEnd < 0 then Exit; iStart := AnsiPos('+', ALoginName); if iStart < 0 then iStart := 0; if iEnd <= iStart + 1then Exit; Result := Copy(ALoginName, iStart + 1, iEnd - iStart - 1); end; function TSuperObjectCaseFrm.GetAndClearServerID(var ALoginName: string): string; var iStart, iEnd, Len: Integer; begin Result := ''; iEnd := AnsiPos('-', ALoginName); if iEnd < 0 then Exit; iStart := AnsiPos('+', ALoginName); if iStart < 0 then iStart := 0; if iEnd <= iStart + 1then Exit; Result := Copy(ALoginName, iStart + 1, iEnd - iStart - 1); ALoginName := Copy(ALoginName, iEnd + 1, Length(ALoginName) - iEnd); end; function TSuperObjectCaseFrm.RemoverBridgeServerID(ALoginName: string): string; var iStart: Integer; begin iStart := AnsiPos('+', ALoginName); if iStart < 0 then iStart := 0; Result := Copy(ALoginName, iStart + 1, Length(ALoginName) - iStart); end; procedure test(const This, Params: ISuperObject; var Result: ISuperObject); begin ShowMessage('Hello'); end; procedure TSuperObjectCaseFrm.btn7Click(Sender: TObject); var jo: ISuperObject; rs: ISuperObject; begin jo := SO('{}'); rs := SO('{}'); jo.M['test'] := test; mmo1.Lines.Add(jo.AsJSon()); jo.M['test'](nil,nil, rs); end; end.