龙七

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一:现在有Json数据

{"message":"","data":
{
"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
}
]
}
,"success":true}

二:解析

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, superobject;

type
TForm1
=class(TForm)
btn1: TButton;
mmo1: TMemo;
btn2: TButton;
btn3: TButton;
btn4: TButton;
btn5: TButton;
btn6: TButton;
btn7: TButton;
btn8: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn6Click(Sender: TObject);
procedure btn7Click(Sender: TObject);
procedure btn8Click(Sender: TObject);
procedure btn5Click(Sender: TObject);
private
JoData,Jo:ISuperObject;
DataStr:
string;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

//uses superobject;

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
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.btn2Click(Sender: TObject);
var
s:
string;
i: Integer;
d: Double;
b: Boolean;
begin
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.btn3Click(Sender: TObject);
begin

ShowMessage(jo[
'addresses.address'].AsString);
ShowMessage(jo[
'addresses.pc'].AsString);
end;
procedure TForm1.btn4Click(Sender: TObject);
var
ja: TSuperArray;
begin
ja :
= jo['tel'].AsArray;

ShowMessage(IntToStr(ja.Length));
ShowMessage(ja[
0].AsString);
ShowMessage(ja[
1].AsString);

ja :
= jo['children'].AsArray;
ShowMessage(inttostr(ja.length));
ShowMessage(ja[
0]['name'].AsString);
ShowMessage(ja[
1]['name'].AsString);
end;

procedure TForm1.btn6Click(Sender: TObject);
var
item: ISuperObject;
begin
ShowMessage(jo[
'children'].AsJSon(False, False));
//for item in jo['children'] do
// ShowMessage(item.AsJSon(False, False));
end;

procedure TForm1.btn7Click(Sender: TObject);
var
item: TSuperAvlEntry;
begin
ShowMessage(jo.AsObject.GetNames.AsString);
ShowMessage(jo.AsObject.GetValues.AsString);
//ShowMessageFmt('Name: %s; Value: %s', [jo.AsObject.GetNames, jo.AsObject.GetValues.AsString]);
//for item in jo.AsObject do
// ShowMessageFmt('Name: %s; Value: %s', [item.Name, item.Value.AsString]);
end;


procedure TForm1.btn8Click(Sender: TObject);
var
item: TSuperObjectIter;
begin

if ObjectFindFirst(jo, item) then
repeat
ShowMessageFmt(
'key: %s; val: %s', [item.key, item.val.AsString]);
untilnot ObjectFindNext(item);
ObjectFindClose(item);
end;

procedure TForm1.btn5Click(Sender: TObject);
begin
JoData:
=SO(mmo1.Text);
if JoData['success'].AsBoolean then
begin
DataStr:
=JoData['data'].AsString;
showmessage(datastr);
Jo:
=so(DataStr);
end;
end;

end.
posted on 2011-07-11 17:11  龙七  阅读(807)  评论(0编辑  收藏  举报