XE3随笔3:访问
2024-10-10 20:22:55
测试数据提前加入 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
最新文章
- 全国城市三级联动 html+js
- C++之检测文件结尾
- DataTable是否存在某个列的判断
- GO语言练习:组合的用法
- Teamwork-Week3 职责划分及团队分数分配原则
- 【PHP高效搜索专题(1)】sphinx&;Coreseek的介绍与安装
- libprotobuff8.so not found
- 20. leetcode 171. Excel Sheet Column Number
- IDEA如何创建及配置Web项目(多图)
- Spark2.1.0官方文档
- 使用lrucache和diskLrucache实现照片墙
- Java Socket:Java-NIO-ServerSocketChannel
- Paper | 帧间相关性 + 压缩视频质量增强(MFQE)
- Testing - 软件测试知识梳理 - 基础概念
- CF-Contest339-614
- django创建app、在视图函数及url中使用参数、url命名、通过redirect实现网页路径跳转
- 系统相关的信息模块: import sys
- Jmeter常用脚本开发之SOAP/XML-RPC Request
- Expression Tree Build
- poj - 1191 - 棋盘切割(dp)
热门文章
- node.js和express.js安装和使用步骤 [windows]
- [内核]Linux workqueue
- [Tex学习笔记]一个数学公式
- (DP)3.Longest Substring Without Repeating Characters
- [转载]:经纬度与WGS84坐标转换
- 单机运行环境搭建之 --CentOS-6.5安装配置Tengine
- c++的类与对象
- javaweb学习第一天 debug
- 配置高可用的Hadoop平台
- Fiddler抓包测试App接口