测试数据提前加入 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

XE3随笔3:访问的更多相关文章

  1. XE3随笔20:几个和当前路径相关的新函数

    偶然从 SysUtils 里发现了几个路径相关的函数, 以前没见过, 可能是 Delphi XE3 新增的: GetLocaleDirectory(); GetLocaleFile(); Locale ...

  2. XE3随笔21:系统默认语言与系统支持的语言列表

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  3. XE3随笔18:实例 - 解析 Google 关键字搜索排名

    同上例类似, 通过 'http://clients1.google.cn/complete/search?&q=' + "关键字" 可以获取 Google 的关键字搜索排名 ...

  4. XE3随笔19:实例 - 借用 Google 实现全文翻译

    调用 Google 翻译的地址格式: http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + ...

  5. XE3随笔17:实例 - 模拟 Google 搜索

    本例测试效果图: 代码文件: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics ...

  6. XE3随笔16:将字符串转换成 UTF8 编码的函数

    这种转换一般用于网页地址; 我不知道 Delphi 是不是有现成的函数, 用到了就写了一个. //函数: function ToUTF8Encode(str: string): string; var ...

  7. XE3随笔15:使用 IXMLHTTPRequest 简单获取网页源代码

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  8. XE3随笔15:从XML中解析

    SuperObject 文件包中还有一个 SuperXmlParser 单元, 可以从 XML 中解析出 ISuperObject. SuperXmlParser 只有三个函数: XMLParseSt ...

  9. XE3随笔12:TSuperTableString、TSuperAvlEntry

    通过 ISuperObject.AsObject 可获取一个 TSuperTableString 对象. TSuperTableString 的常用属性: count.GetNames.GetValu ...

随机推荐

  1. 递归绑定将数据表中的数据按层级更新到 TreeView节点上

     private void bindTreeView1()         {             string sql = "select * from dm_category&quo ...

  2. 极限编程之TDD

         测试驱动开发(Test-Driven Development,TDD)是通过测试定义所要开发的功能的接口,然后实现功能的开发过程. Test-Driven Development(TDD), ...

  3. iBeacon知识1

    iBeacon的数据主要由四种资讯构成,分别是UUID(通用唯一标识符).Major.Minor.Measured Power. UUID是规定为ISO/IEC11578:1996标准的128位标识符 ...

  4. Mysql 小技巧

    查询出的日期 加一天,加一周,加一月,加一年 DAY)); WEEK)); MONTH)); YEAR)); 查询出的日期 减一天,减一周,减一月,减一年 DAY)); WEEK)); MONTH)) ...

  5. git 放弃本地修改 强制更新

    git reset --hard origin/master

  6. tomcat的乱码问题

    String filename=request.getParameter("filename"); filename=new String(filename.getBytes(&q ...

  7. Ubuntu14.04通过pyenv配置多python

    参考链接: https://github.com/yyuu/pyenv-virtualenv https://github.com/yyuu/pyenv http://seisman.info/pyt ...

  8. weed-fs 基础测试

    =================== 启动 master 端口:9333 =================== sunsl@test-server:~$ weed master I0102 15: ...

  9. Egret 摇一摇功能

    一  什么是重力感应 二 什么是陀螺仪 三 Egret中的摇一摇是利用什么原理实现的 四 摇一摇代码 一 什么是重力感应 二 什么是陀螺仪 三 Egret中的摇一摇是利用什么原理实现的 大概是利用手机 ...

  10. C# JSON to object

    /// <summary> /// json格式转换(引用System.Web.Extension类库) /// </summary> /// <param name=& ...