首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

SuperObject 資料型別系統:TSuperType 完整對照與判斷技巧

     編輯:Delphi

SuperObject 定義 TSuperType 列舉代表 JSON 八種資料型別。掌握型別判斷與轉換,能避免執行期錯誤並撰寫健壯的泛型處理邏輯。

TSuperType 列舉定義

TSuperType = (stNull, stBoolean, stDouble, stInt, stObject, stArray, stString, stMethod);

型別判斷輔助函式

function GetJsonTypeName(const obj: ISuperObject): string;
begin
  case obj.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;

各型別建構與判斷實測

procedure TForm1.Button1Click(Sender: TObject);
var jo: ISuperObject;
begin
  jo := SO('{A:1, B:2}'); ShowMessage(GetJsonTypeName(jo)); // stObject
  jo := SO;               ShowMessage(GetJsonTypeName(jo)); // stObject (空物件)

  jo := SO('abc');        ShowMessage(GetJsonTypeName(jo)); // stString
  jo := SO(123);          ShowMessage(GetJsonTypeName(jo)); // stInt
  jo := SO('123');        ShowMessage(GetJsonTypeName(jo)); // stInt (字串數字自動轉型)
  jo := SO(3.14);         ShowMessage(GetJsonTypeName(jo)); // stDouble
  jo := SO('3.14');       ShowMessage(GetJsonTypeName(jo)); // stDouble

  jo := SO(False);        ShowMessage(GetJsonTypeName(jo)); // stBoolean
  jo := SO('[1,2,3]');    ShowMessage(GetJsonTypeName(jo)); // stArray
  jo := TSuperObject.Create(stMethod); ShowMessage(GetJsonTypeName(jo)); // stMethod
  jo := SO('null');       ShowMessage(GetJsonTypeName(jo)); // stNull
end;

靜態判斷函式 ObjectIsType

提供泛型式檢查,可避免介面為 nil 時存取 DataType 造成存取違規:

procedure TForm1.Button2Click(Sender: TObject);
var jo: ISuperObject;
begin
  jo := SO('[]');
  if jo.DataType = stArray then ShowMessage('stArray'); // 需確保 jo <> nil
  if ObjectIsType(jo, stArray) then ShowMessage('stArray'); // 安全,nil 回傳 False
end;

型別轉換屬性速查

目標型別屬性/方法備註
Integer.AsInteger / .I[key]自動從 Double、String 轉換
Double.AsDouble / .D[key]
Boolean.AsBoolean / .B[key]
String.AsString / .S[key]
ISuperObject.AsObject / .O[key]物件或陣列皆可
TSuperArray.AsArray / .A[key]僅陣列型別

最佳實務

  • 存取前先用 ObjectIsType 或 DataType 確認型別,避免隱性轉換導致資料遺失(如 Double 轉 Int 截斷)。
  • 撰寫通用序列化/驗證邏輯時,以 DataType 分派處理。
  • stMethod 為 SuperObject 獨有擴充,標準 JSON 無對應,跨系統交換時需移除或轉換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved