superobject使用方法
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(IntToStr(jts.count)); // 4 ShowMessage(jts.GetNames.AsString); // ["D","C","B","A"] ShowMessage(jts.GetValues.AsString); // [{"z":6,"y":5,"x":4},3,2,1] jts := jo['D'].AsObject; ShowMessage(IntToStr(jts.count)); // 3 ShowMessage(jts.GetNames.AsString); // ["z","y","x"] ShowMessage(jts.GetValues.AsString); // [6,5,4] end;
使用FOR...IN...遍歷子對象,不適用於DELPHI7等低版本,因為它們不支持此語法。
var jo,i: ISuperObject; begin jo := SO('{A:1, B:2, C:3, D:[4, 5, {X:6}, {Y:[7,8,{m:9}]}]}'); for i in jo do ShowMessage(i.AsString); end;
TSuperAvlIterator 枚舉出的是 TSuperAvlEntry 對象(其包含 Name 和 Value);
獲取 TSuperAvlIterator 方法:
TSuperTableString.GetEnumerator 或者 ISuperObject.AsObject.GetEnumerator.
var jo: ISuperObject; ite: TSuperAvlIterator; begin jo := SO('{A:1, B:2, C:3, D:[4, 5, {X:6}, {Y:7}]}'); ite := jo.AsObject.GetEnumerator;
while ite.MoveNext do
begin
lname := ite.Current.Name;
lvalue := ite.Current.Value.AsString;
end;
end;
ObjectFindFirst、ObjectFindNext、ObjectFindClose 是 SuperObject 給的另一種枚舉元素的方式.
它用到了一個結構:
TSuperObjectIter = record key: SOString; val: ISuperObject; Ite: TSuperAvlIterator; end; //應用舉例: var jo: ISuperObject; iter: TSuperObjectIter; begin jo := SO('{A:1, B:2, C:3, D:[4, 5, {X:6}, {Y:7}]}'); if ObjectFindFirst(jo, iter) then begin repeat ShowMessageFmt('%s - %s', [iter.key, iter.val.AsString]); until not ObjectFindNext(iter); end; ObjectFindClose(iter); end; //或者: var jo: ISuperObject; iter: TSuperObjectIter; begin jo := SO('{A:1, B:2, C:3, D:[4, 5, {X:6}, {Y:7}]}'); if ObjectFindFirst(jo, iter) then begin repeat ShowMessageFmt('%s - %s', [iter.Ite.Current.Name, iter.Ite.Current.Value.AsString]); until not ObjectFindNext(iter); end; ObjectFindClose(iter); end;