本例JSON数据示例:
{
"class": {
"name": "一班",
"persons": [
{
"name": "zhangsan",
"age": "20"
},
{
"name": "lisi",
"age": "18"
}
]
}
}
1、概要
1.1 添加单元引用 uses superobject;
1.2 申明接口对象jo
var
jo: ISuperObject;
1.3 实例化jo
jo := SO(sJsonStr);
1.4 读取
str := jo.O['class'].S['name'];
jArr := jo.O['class'].O['persons'].AsArray();
2、演示简单读取JSON对象的属性值和对象数组的遍历
procedure TForm1.Button1Click(Sender: TObject);
var
sJsonStr: string;
jo, joPerson: ISuperObject; //接口对象申明
jArr: TSuperArray;
i: Integer;
begin
//本例使用的JSON字符串
sJsonStr := '';
sJsonStr := sJsonStr + '{';
sJsonStr := sJsonStr + ' "class":{';
sJsonStr := sJsonStr + ' "name":"一班",';
sJsonStr := sJsonStr + ' "persons":[{"name":"zhangsan","age":"20"},{"name":"lisi","age":"18"}]';
sJsonStr := sJsonStr + ' }';
sJsonStr := sJsonStr + '}';
//实例化对象
jo := SO(sJsonStr);
Memo2.Lines.Clear;
//读取JSON对象的Val值
//1、简单读取
Memo2.Lines.Add('班级名称:' + jo.O['class'].S['name']);
//2、遍历对象数组
jArr := jo.O['class'].O['persons'].AsArray();
for i := 0 to jArr.Length - 1 do
begin
joPerson := jArr.N[i];
Memo2.Lines.Add('人员' + IntToStr(i + 1) + '姓名:' + joPerson.S['name']);
Memo2.Lines.Add('人员' + IntToStr(i + 1) + '年龄:' + IntToStr(joPerson.I['age']));
end;
end;
运行结果如下:
班级名称:一班
人员1姓名:zhangsan
人员1年龄:20
人员2姓名:lisi
人员2年龄:18
3、演示构建JSON对象
procedure TForm1.Button2Click(Sender: TObject);
var
jo, jo2: ISuperObject; //接口对象申明
begin
//实例化对象
jo := SO();
jo2 := SO();
//给jo对象赋值
jo.S['姓名'] := '小王'; //S表示string O表示Object 其它类推..
jo.I['年龄'] := 25;
jo.S['性别'] := '男';
jo2.O['人员'] := jo;
//得到ISuperObject的具体对象的JSON字符串
Memo2.Lines.Clear;
Memo2.Lines.Add('原JSON字符串为:' + jo2.AsString);
end;
运行结果:
原JSON字符串为:{"人员":{"性别":"男","年龄":25,"姓名":"小王"}}
4、注意事项:
4.1 joPerson.S['name'] 也可以写成:joPerson['name'].AsString
4.2 运行时可能会遇到的错误:
如果提示错误:Undeclared identifier: 'DecimalSeparator'
即:没有定义DecimalSeparator,将DecimalSeparator修改为FormatSettings.DecimalSeparator