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;
    
  • 相关阅读:
    perl 模拟curl 发送json数据
    perl put 发送数据
    8小时浓度均值即连续8个小时浓度的平均值
    awk 字段匹配
    rsyslog imfile配置
    EasyUI datetimebox 的onchange事件的问题
    5大领先的商业智能解决方案,国产上榜!
    5大领先的商业智能解决方案,国产上榜!
    perl post 带中文名字的文件
    Openstack 实现技术分解 (2) 虚拟机初始化工具 — Cloud-Init & metadata & userdata
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/7348677.html
Copyright © 2011-2022 走看看