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[].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
JSON 之 SuperObject(3): 访问的更多相关文章
- JSON 之 SuperObject(11): TSuperTableString、TSuperAvlEntry
JSON 之 SuperObject(11): TSuperTableString.TSuperAvlEntry - 万一 - 博客园http://www.cnblogs.com/del/archiv ...
- JSON 之 SuperObject(8): 关于乱码的几种情况 - 向 Henri Gourvest 大师报告
这几天学习 JSON - SuperObject, 非常幸运地得到了其作者 Henri Gourvest 大师的同步指点! (Henri 大师也是 DSPack 和 GDI+ 头文件的作者; 大师是法 ...
- JSON 之 SuperObject(6): 方法
SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: IS ...
- JSON 之 SuperObject(7): 可以省略的双引号
在 JSON 中, 字符串应该在双引号中; 从上个例子才发现: 原来这个双引号可以省略, 有空格都行 当然只是在程序代码中可以省略, 对象会自动识别添加的. 即如此, 下面写法都可以: uses Su ...
- JSON 之 SuperObject(5): Format 与转义字符
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- JSON 之 SuperObject(2): 构建方式与 AsJSon
SuperObject 构建一个 JSON 的常用方法: 从字符串.从文件.从流. unit Unit1; interface uses Windows, Messages, SysUtils, ...
- JSON 之 SuperObject(1)
一直盼着 Delphi 能够直接支持 "正则表达式" 与 "JSON"; Delphi 2009 刚来的时候, 有了 JSON, 但不好, 那时尝试过一点. 这 ...
- servlet 中处理 json 请求,并访问 service 类,返回处理结果
前言:jar 包中的 servlet 必须可以处理前端发出的 ajax 请求,接收参数,并返回结果. github地址:yuleGH github 这里有个约定,url 地址是 .json 结尾的,如 ...
- JSON 之 SuperObject(10): Merge、Clone、ForcePath
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
随机推荐
- [百度空间] ld: add library file reference by path & file name
By default, -l option will search libraries with lib* prefix in speficied search paths. i.e. 1 ld -o ...
- nmap所有参数详解
QQ:1258496116 端口:80http 443https 53dns 25smtp 22ssh 23telnet20.21ftp 110pop3 119nntp 143imap 179bgp ...
- asp.net word ecxel类型文件在线预览
asp.net word ecxel类型文件在线预览 首先得引用COM: Microsoft Excel 10 Object Library Microsoft Word 10 Object Libr ...
- 一个有趣的Ajax Hack示范
今天在梦之光芒的BLOG上看见了一个Ajax Hack示范,其实跨站发现很容易,但是要做到大危害还是很难,偷偷COOKIE什么的只针对用户而已,XSS WORM的那种利用才是可怕的. 来看看他的一段V ...
- ubuntu 点点滴滴
pptpd http://linux.cn/article-3376-1.html 命令行升级ubuntu版本 do-release-upgrade -d 寻找最新的稳定版本,加上-d参数则包括不稳 ...
- winform中的时间轴控件
我现在做的项目遇到一个需求,就是有没有类似的控件: 我要实现的功能是:播放录像. 某个时间段内假如有2个录像,这个坐标表示的是时间,假如我现在拖动时间轴,拖到第一个录像里面开始播放第一个录像,拖到2个 ...
- codeforces 439C Devu and Partitioning of the Array(烦死人的多情况的模拟)
题目 //这是一道有n多情况的烦死人的让我错了n遍的模拟题 #include<iostream> #include<algorithm> #include<stdio.h ...
- 无法激活服务,因为它不支持 ASP.NET 兼容性
wcf错误直接上图: 原因: 一般是因为程序添加了启用了AJAX的WCF服务而缺少相关设置出现的错误. 解决方案: 1.webconfig <system.serviceModel> &l ...
- MySQL 5.1参考手册
目录 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. My ...
- Win7 _Object_header 中的 TypeIndex
Win7 比较 xp下ObjectHeader中的内容有所变化,xp直接在OBJECT_HEADER里保存了POBJECT_TYPE指针,而Win7中把所有的对象类型放在了一个表里,这个表叫做ObTy ...