测试数据提前加入 Memo1 中:


{
"name": "张三", /* 注释 */
"age": 33,
"sex": true,
"weight": 123.456,
"tel": ["86-1111111", "86-2222222"],
"addresses":{"address":"A省B市", "pc":"100001"},
"children": [
{
"name": "张继",
"age": "22",
"sex": true
},
{
"name": "张承",
"age": "11",
"sex": false
}
]
}


代码文件:


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[].AsString);
  ShowMessage(ja[].AsString);   ja := jo['children'].AsArray;
  ShowMessage(ja[]['name'].AsString);
  ShowMessage(ja[]['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 =
  Top =
  Caption = 'Form1'
  ClientHeight =
  ClientWidth =
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch =
  TextHeight =
  object Memo1: TMemo
    Left =
    Top =
    Width =
    Height =
    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 =
    ExplicitHeight =
  end
  object Button1: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button1'
    TabOrder =
    OnClick = Button1Click
  end
  object Button2: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button2'
    TabOrder =
    OnClick = Button2Click
  end
  object Button3: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button3'
    TabOrder =
    OnClick = Button3Click
  end
  object Button4: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button4'
    TabOrder =
    OnClick = Button4Click
  end
  object Button5: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button5'
    TabOrder =
    OnClick = Button5Click
  end
  object Button6: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button6'
    TabOrder =
    OnClick = Button6Click
  end
  object Button7: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button7'
    TabOrder =
    OnClick = Button7Click
  end
  object Button8: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button8'
    TabOrder =
    OnClick = Button8Click
  end
end

最新文章

  1. 全国城市三级联动 html+js
  2. C++之检测文件结尾
  3. DataTable是否存在某个列的判断
  4. GO语言练习:组合的用法
  5. Teamwork-Week3 职责划分及团队分数分配原则
  6. 【PHP高效搜索专题(1)】sphinx&Coreseek的介绍与安装
  7. libprotobuff8.so not found
  8. 20. leetcode 171. Excel Sheet Column Number
  9. IDEA如何创建及配置Web项目(多图)
  10. Spark2.1.0官方文档
  11. 使用lrucache和diskLrucache实现照片墙
  12. Java Socket:Java-NIO-ServerSocketChannel
  13. Paper | 帧间相关性 + 压缩视频质量增强(MFQE)
  14. Testing - 软件测试知识梳理 - 基础概念
  15. CF-Contest339-614
  16. django创建app、在视图函数及url中使用参数、url命名、通过redirect实现网页路径跳转
  17. 系统相关的信息模块: import sys
  18. Jmeter常用脚本开发之SOAP/XML-RPC Request
  19. Expression Tree Build
  20. poj - 1191 - 棋盘切割(dp)

热门文章

  1. node.js和express.js安装和使用步骤 [windows]
  2. [内核]Linux workqueue
  3. [Tex学习笔记]一个数学公式
  4. (DP)3.Longest Substring Without Repeating Characters
  5. [转载]:经纬度与WGS84坐标转换
  6. 单机运行环境搭建之 --CentOS-6.5安装配置Tengine
  7. c++的类与对象
  8. javaweb学习第一天 debug
  9. 配置高可用的Hadoop平台
  10. Fiddler抓包测试App接口