JSON 之 SuperObject(9): TSuperType

unit Unit1;

interface

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

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;

//类型
procedure TForm1.Button1Click(Sender: TObject);
  function GetJsonType(I: ISuperObject): string;
  begin
    case I.DataType of
      stNull:    Result := ‘stNull‘;
      stBoolean: Result := ‘stBoolean‘;
      stDouble:  Result := ‘stDouble‘;
      stInt:     Result := ‘stInt‘;
      stObject:  Result := ‘stObject‘;
      stArray:   Result := ‘stArray‘;
      stString:  Result := ‘stString‘;
      stMethod:  Result := ‘stMethod‘;
    end;
  end;
var
  jo: ISuperObject;
begin
  jo := SO(‘{A:1, B:2}‘);
  ShowMessage(GetJsonType(jo)); {stObject}
  jo := SO;
  ShowMessage(GetJsonType(jo)); {stObject}

  jo := SO(‘abc‘);
  ShowMessage(GetJsonType(jo)); {stString}

  jo := SO(123);
  ShowMessage(GetJsonType(jo)); {stInt}
  jo := SO(‘123‘);
  ShowMessage(GetJsonType(jo)); {stInt}

  jo := SO(3.14);
  ShowMessage(GetJsonType(jo)); {stDouble}
  jo := SO(‘3.14‘);
  ShowMessage(GetJsonType(jo)); {stDouble}

  jo := SO(False);
  ShowMessage(GetJsonType(jo)); {stBoolean}

  jo := SO(‘[1,2,3,a,b,c]‘);
  ShowMessage(GetJsonType(jo)); {stArray}

  jo := TSuperObject.Create(stMethod);
  ShowMessage(GetJsonType(jo)); {stMethod}

  jo := SO(‘null‘);
  ShowMessage(GetJsonType(jo)); {stNull}
end;

//判断
procedure TForm1.Button2Click(Sender: TObject);
var
  jo: ISuperObject;
begin
  jo := SO(‘[]‘);

  if jo.DataType = stArray then ShowMessage(‘stArray‘);

  if ObjectIsType(jo, stArray) then ShowMessage(‘stArray‘);
end;

end.
时间: 2024-08-25 08:14:36

JSON 之 SuperObject(9): TSuperType的相关文章

JSON 之 SuperObject(6): 方法

SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: ISuperObject; var Result: ISuperObject); //另外, 这是其数据类型的枚举: TSuperType = (stNull, stBoolean, stDouble, stInt, stObject, stArray, stString, stMethod); 测试代码: un

JSON 之 SuperObject(1)

一直盼着 Delphi 能够直接支持 "正则表达式" 与 "JSON"; Delphi 2009 刚来的时候, 有了 JSON, 但不好, 那时尝试过一点. 这是以前的链接: 什么是 JSON? Delphi 2010 带了两个相关单元: DBXJSON.DBXJSONReflect 貌似很强大, 但主要是给 DataSnap 准备的; 尝试了半天, 也很失望: 可能给 DataSnap 网络数据传递够用了, 但太简陋了, 好像是没写完, 对中文支持也有问题. 我想

JSON 之 SuperObject(7): 可以省略的双引号

在 JSON 中, 字符串应该在双引号中; 从上个例子才发现: 原来这个双引号可以省略, 有空格都行 当然只是在程序代码中可以省略, 对象会自动识别添加的. 即如此, 下面写法都可以: uses SuperObject; procedure TForm1.Button1Click(Sender: TObject); var   jo1,jo2,jo3: ISuperObject; begin   jo1 := SO('{"Name":"张三", "Age&

JSON 之 SuperObject(13): 关于 SO 与 SA 函数

通过 SuperObject 的公用函数 SO 实现一个 ISuperObject 接口非常方便; 前面都是给它一个字符串参数, 它的参数可以是任一类型甚至是常数数组. SA 和 SO 都是返回一 ISuperObject;SO 可以产生一个 stArray 类型的 ISuperObject, 但 SA 只会产生 stArray 类型的 ISuperObject;SA 的参数也只能是常数数组. unit Unit1; interface uses   Windows, Messages, Sys

JSON 之 SuperObject(8): 关于乱码的几种情况 - 向 Henri Gourvest 大师报告

这几天学习 JSON - SuperObject, 非常幸运地得到了其作者 Henri Gourvest 大师的同步指点! (Henri 大师也是 DSPack 和 GDI+ 头文件的作者; 大师是法国人, 竟能用中文给我回复, 没想到!). 学习中发现 SuperObject 有些地方对中文(或者说 Unicode)支持不是所期望的, 现在专贴提出来供大师鉴别. 以下例子都会出现乱码, 虽然都可以有变通的方案, 但如果不乱码就太好了! unit Unit1; interface uses  

JSON 之 SuperObject(5): Format 与转义字符

unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TForm1 = class(TForm)     Button1: TButton;     Button2: TButton;     procedure Button1Click(Sender: TObject);     pro

JSON 之 SuperObject(2): 构建方式与 AsJSon

SuperObject 构建一个 JSON 的常用方法: 从字符串.从文件.从流. unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TForm1 = class(TForm)     Button1: TButton;     Button2: TButton;     Button

JSON 之 SuperObject(11): TSuperTableString、TSuperAvlEntry

通过 ISuperObject.AsObject 可获取一个 TSuperTableString 对象. TSuperTableString 的常用属性: count.GetNames.GetValues var   jo: ISuperObject;   jts: TSuperTableString; begin   jo := SO('{A:1, B:2, C:3, D:{x:4, y:5, z:6}}');   jts := jo.AsObject;   ShowMessage(IntTo

JSON 之 SuperObject(17): 实例 - 借用 Google 实现全文翻译

调用 Google 翻译的地址格式: http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + 原始文本 + "&langpair=" + 原语言 + "%7C" + 目标语言 返回的数据格式如下, 可以用 responseData.translatedText 简单获取: { "responseData" : {"trans