zoukankan      html  css  js  c++  java
  • superobject使用方法

    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;
    
  • 相关阅读:
    Visula Studio 2013 初始化静态浮点型数据在C++类内
    catkin_make与gtest出现冲突的问题与解决
    用Visual studio2012在Windows8上开发内核驱动监视线程创建
    用Visual studio2012在Windows8上开发内核驱动监视进程创建
    TEA加密算法的C/C++实现
    说说某游戏保护驱动中驱动黑名单的具体实现
    [Windows驱动开发](四)内存管理
    [Windows驱动开发](三)基础知识——驱动例程
    [Windows驱动开发](二)基础知识——数据结构
    [Windows驱动开发](一)序言
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/7348677.html
Copyright © 2011-2022 走看看