• JSON 之 SuperObject(3): 访问


    测试数据提前加入 Memo1 中:




    代码文件:


    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;
        Button7: TButton;
        Button8: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure Button7Click(Sender: TObject);
        procedure Button8Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses SuperObject;
    
    //数组式访问
    procedure TForm1.Button1Click(Sender: TObject);
    var
      jo: ISuperObject;
    begin
      jo := SO(Memo1.Text);
      ShowMessage(jo['name'].AsString);
      ShowMessage(jo['age'].AsString);
      ShowMessage(jo['sex'].AsString);
      ShowMessage(jo['weight'].AsString);
      ShowMessage(jo['addresses'].AsString);
      ShowMessage(jo['tel'].AsString);
      ShowMessage(jo['children'].AsString);
    end;
    
    //指定返回类型
    procedure TForm1.Button2Click(Sender: TObject);
    var
      jo: ISuperObject;
      s: string;
      i: Integer;
      d: Double;
      b: Boolean;
    begin
      jo := SO(Memo1.Text);
    
      s := jo['name'].AsString;
      i := jo['age'].AsInteger;
      b := jo['sex'].AsBoolean;
      d := jo['weight'].AsDouble;
    
      ShowMessage(s);
      ShowMessage(IntToStr(i));
      ShowMessage(BoolToStr(b, True));
      ShowMessage(FloatToStr(d));
    
      s := jo.S['name'];
      i := jo.I['age'];
      b := jo.B['sex'];
      d := jo.D['weight'];
    
      ShowMessage(s);
      ShowMessage(IntToStr(i));
      ShowMessage(BoolToStr(b, True));
      ShowMessage(FloatToStr(d));
    {
      jo['name'] 是 jo.O['name'] 的简化形式, 因为它是类的默认数组;
      jo.N 类似 jo.O, 区别是 jo.N 在参数不妥时可返回空;
      jo.M 和方法有关, 对象中可嵌入方法.
    }
    end;
    
    //内嵌对象访问
    procedure TForm1.Button3Click(Sender: TObject);
    var
      jo: ISuperObject;
    begin
      jo := SO(Memo1.Text);
    
      ShowMessage(jo['addresses.address'].AsString);
      ShowMessage(jo['addresses.pc'].AsString);
    end;
    
    //TSuperArray
    procedure TForm1.Button4Click(Sender: TObject);
    var
      jo: ISuperObject;
      ja: TSuperArray;
    begin
      jo := SO(Memo1.Text);
      ja := jo['tel'].AsArray;
    
      ShowMessage(IntToStr(ja.Length));
      ShowMessage(ja[0].AsString);
      ShowMessage(ja[1].AsString);
    
      ja := jo['children'].AsArray;
      ShowMessage(ja[0]['name'].AsString);
      ShowMessage(ja[1]['name'].AsString);
    end;
    
    //遍历对象
    procedure TForm1.Button5Click(Sender: TObject);
    var
      item,jo: ISuperObject;
    begin
      jo := SO(Memo1.Text);
      for item in jo do ShowMessage(item.AsJSon(False, False));
    end;
    
    //遍历子对象
    procedure TForm1.Button6Click(Sender: TObject);
    var
      item,jo: ISuperObject;
    begin
      jo := SO(Memo1.Text);
      for item in jo['children'] do
        ShowMessage(item.AsJSon(False, False));
    end;
    
    //使用 TSuperAvlEntry 或 TSuperTableString 遍历
    procedure TForm1.Button7Click(Sender: TObject);
    var
      jo: ISuperObject;
      item: TSuperAvlEntry;
    begin
      jo := SO(Memo1.Text);
      for item in jo.AsObject do
        ShowMessageFmt('Name: %s; Value: %s', [item.Name, item.Value.AsString]);
    end;
    
    //使用 TSuperObjectIter 遍历
    procedure TForm1.Button8Click(Sender: TObject);
    var
      jo: ISuperObject;
      item: TSuperObjectIter;
    begin
      jo := SO(Memo1.Text);
    
      if ObjectFindFirst(jo, item) then
      repeat
        ShowMessageFmt('key: %s; val: %s', [item.key, item.val.AsString]);
      until not ObjectFindNext(item);
      ObjectFindClose(item);
    end;
    
    end.

    窗体文件:


    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 296
      ClientWidth = 377
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Memo1: TMemo
        Left = 0
        Top = 0
        Width = 281
        Height = 296
        Align = alLeft
        Lines.Strings = (
          '{'
          '  "name": "'#24352#19977'", /* '#27880#37322' */'
          '  "age": 33,'
          '  "sex": true,'
          '  "weight": 123.456,'
          '  "tel": ["86-1111111", "86-2222222"],'
          '  "addresses":{"address":"A'#30465'B'#24066'", "pc":"100001"},'
          '  "children": ['
          '    {'
          '      "name": "'#24352#32487'",'
          '      "age": "22",'
          '      "sex": true'
          '    },'
          '    {'
          '      "name": "'#24352#25215'",'
          '      "age": "11",'
          '      "sex": false'
          '    }'
          '  ]'
          '}')
        ScrollBars = ssBoth
        TabOrder = 0
        ExplicitHeight = 292
      end
      object Button1: TButton
        Left = 287
        Top = 24
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 1
        OnClick = Button1Click
      end
      object Button2: TButton
        Left = 287
        Top = 55
        Width = 75
        Height = 25
        Caption = 'Button2'
        TabOrder = 2
        OnClick = Button2Click
      end
      object Button3: TButton
        Left = 287
        Top = 86
        Width = 75
        Height = 25
        Caption = 'Button3'
        TabOrder = 3
        OnClick = Button3Click
      end
      object Button4: TButton
        Left = 287
        Top = 117
        Width = 75
        Height = 25
        Caption = 'Button4'
        TabOrder = 4
        OnClick = Button4Click
      end
      object Button5: TButton
        Left = 287
        Top = 148
        Width = 75
        Height = 25
        Caption = 'Button5'
        TabOrder = 5
        OnClick = Button5Click
      end
      object Button6: TButton
        Left = 287
        Top = 179
        Width = 75
        Height = 25
        Caption = 'Button6'
        TabOrder = 6
        OnClick = Button6Click
      end
      object Button7: TButton
        Left = 287
        Top = 213
        Width = 75
        Height = 25
        Caption = 'Button7'
        TabOrder = 7
        OnClick = Button7Click
      end
      object Button8: TButton
        Left = 287
        Top = 244
        Width = 75
        Height = 25
        Caption = 'Button8'
        TabOrder = 8
        OnClick = Button8Click
      end
    end
  • 相关阅读:
    js 常见业务数据数组转换操作 时间复杂度降级O(n)的尝试
    【20220226】连岳摘抄
    【20220227】连岳摘抄
    【20220301】连岳摘抄
    【20220225】连岳摘抄
    【20220228】连岳摘抄
    【20220224】事情还是要乐观对待
    Atcoder Beginner Contest 208 F Cumulative Sum(拉格朗日插值)
    Solution 「CF 1622F」Quadratic Set
    Solution 「CF 923F」Public Service
  • 原文地址:https://www.cnblogs.com/cpprun/p/4787958.html
Copyright © 2020-2023  润新知