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;
    
  • 相关阅读:
    交通综合改造工程EPC总承包项目
    二三维一体化地理信息平台
    NetCore3.1升级到Net5.0序列化方法过时问题
    windows server2012部署.net core IIS,页面报503,应用程序池自动停止。。。
    NetCore使用NPOI导入Word中的图片信息
    NetCore 使用 iTextSharp 读取 PDF 中的文字信息
    NetCore 在 Docker中文件路径找不到的问题
    Vue中数组list直接push的是对象而不是追加数据的问题
    netcore3.1增加阿里云OSS云存储服务
    Centos中Docker容器中程序访问宿主机Redis和Mysql
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/7348677.html
Copyright © 2011-2022 走看看