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 ...
随机推荐
- try-catch语句讲解
try-catch 语句由一个 try 块后跟一个或多个 catch 子句构成,这些子句指定不同的异常处理程序. 引发异常时,公共语言运行时 (CLR) 会查找处理此异常的 catch 语句. 如果当 ...
- Sqli-labs less 49
Less-49 本关与47关基本类似,区别在于没有错误回显,所以我们可以通过延时注入和导入文件进行注入. 利用延时注入 http://127.0.0.1/sqli-labs/Less-49/?sort ...
- (转)Tips for Optimizing C/C++ Code
本来要自己翻译的,随手搜索了一下,发现五天前已经有人翻译了,我就不重复发明轮子了. 转自:http://blog.csdn.net/yutianzuijin/article/details/26289 ...
- VS2010中出现无法嵌入互操作类型
针对word或excel操作时,出现VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法 问了度娘,解决方法如出一辙:选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型” ...
- Axis2学习的第一天
按照下面,分别建2个工程,一个client(客户端),一个server(服务端) 先实现服务端: 1.编写services.xml文件,该文件是放在aar文件里的\META-INF目录下的: < ...
- Android安卓开发环境搭建详细教程
安装目录:步骤1 安装JDK步骤2 安装 Android SDK ----http://www.androiddevtools.cn/ 步骤3 安装Tomcat步骤4 安装Ant步骤5 安装Eclip ...
- 544B. Sea and Islands
题目链接 题意: n*n的里面全是S的方格中,填充L,若填充的L上下左右都没有相邻的L则是一个快,问题是能否形成k个块 n可以去奇数也可以去偶数 只要我们输出满足条件的一个结果就好了 对于从0 - n ...
- iOS开发--正则表达式
目录[-] 正则表达式简单语法总结 一.什么是正则表达式 二.正则表达式的基础语法 1.字面值 2.特殊字符(元字符) (1)句号 (2)字符类([]) (3)区间符号(-) (4)取反符号(^) ( ...
- iOS开发--邮箱,电话号码,身份证正则表达式验证
//邮箱 + (BOOL) validateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@ ...
- Samba 服务使用的端口和协议(是一组TCP UDP协议的组合,主要使用CIFS协议,有一个Java例子)
Samba服务所使用的端口和协议: 1)Port 137 (UDP) - NetBIOS 名字服务 : nmbd 2)Port 138 (UDP) - NetBIOS 数据报服务 3)Port 139 ...