程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> JSON 之 SuperObject(12): TSuperEnumerator、TSuperAvlIterator、ObjectFindFirst...

JSON 之 SuperObject(12): TSuperEnumerator、TSuperAvlIterator、ObjectFindFirst...

編輯:Delphi

  通過 ISuperObject.GetEnumerator 可獲取一個 TSuperEnumerator 對象.

  TSuperEnumerator 主要有: MoveNext 方法、Current 屬性; 使用舉例:

var 
 jo: ISuperObject; 
 e: TSuperEnumerator; 
begin 
 jo := SO('{A:1, B:2, C:3, D:[4, 5, {X:6}, {Y:[7,8,{m:9}]}]}'); 
 e := jo.GetEnumerator; 
 while e.MoveNext do 
 begin 
  ShowMessage(e.Current.AsString); 
 end; 
 e.Free; 
end; 
 
//上面程序其實沒有實用價值, 因為下面一句話就可以代替上面這些: 
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; 

  同通過 TSuperEnumerator 枚舉出的只有 Name:Value 中的 Value;

  通過 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; 
 
 ite.First; 
 ShowMessageFmt('%s : %s', [ite.Current.Name, ite.Current.Value.AsString]); 
 
 ite.Next; 
 ShowMessageFmt('%s : %s', [ite.Current.Name, ite.Current.Value.AsString]); 
 
 ite.Last; 
 ShowMessageFmt('%s : %s', [ite.Current.Name, ite.Current.Value.AsString]); 
 
 ite.Prior; 
 ShowMessageFmt('%s : %s', [ite.Current.Name, ite.Current.Value.AsString]); 
 
 ite.Free; 
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; 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved