一:现在有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}
{
"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.
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.