SuperObject是delphi不多的著名开源JSON开源类库,其作者的作品还有大名鼎鼎的DSPACK等许多著名的开源VCL类库。
至于SuperObject的详细用法,万一老师已经很描述很清楚。最新版的1.2.1,添加了currency属性,也支持D2010,包括最新的RTTI。
SuperObject看起来很容易上手,但有一些概念必须理解清楚,比如数组的创建和使用、空值如何赋值等。以下就讲讲SuperObject一些特殊的用法:
1、JSON数组。创建数组有两种方式,一个是 TSuperObject.Create(stArray),另外一种是用接口方式 SA([]);
最常用的是后面一种。数组JSON对象转换AsArray方法,然后使用ADD或其length等方法或属性;数组加入JSON对象,JSON对象必须以O的属性支持赋值;范例如下:
//这个范例是创建列的元信息
var
sj,aj,sj2:ISuperObject;
i:Integer;
Fieldtyp,JsonTyp:string;
List:TStringList;
begin
sj := SO();//创建JSON对象
aj := SA([]);//创建数组
for i := 0 to DataSet.FieldCount - 1 do
begin
sj2 := SO();//创建列的信息,数组里的子对象
//GetFieldTypeInfo(DataSet.Fields[i],Fieldtyp,JsonTyp);//获取字段信息,以及对应的JSON字段信息,可以忽略不看
sj2.S[cstFieldName] := DataSet.Fields[i].FieldName;
sj2.S[cstFieldType] := Fieldtyp;
sj2.S[cstJsonType] := JsonTyp;
sj2.I[cstFieldSize] := DataSet.Fields[i].Size;
sj2.B[cstRequired] := DataSet.Fields[i].Required;
sj2.I[cstFieldIndex] := DataSet.Fields[i].Index;
aj.AsArray.Add(sj2);// 数组转换,必须用 AsArray
List.Add(DataSet.Fields[i].FieldName+'='+JsonTyp);
end;
sj.O['Cols'] := aj;//数组添加到JSON对象,必须以对象方式
end;
2、如何处理空值NULL。空值是强类型数据下一种未赋值或未知的值。下面是SuperObject 的数据类型,看看字面意思也就大概明白。 TSuperType = (
stNull,
stBoolean,
stDouble,
stCurrency,
stInt,
stObject,
stArray,
stString
,stMethod );
SO()接口方法有好多Overload方法,其中
function SO(const value: Variant): ISuperObject; overload
就包含了空值的处理。同样,空值也是一种属性对象,因此,我们必须这样赋值:
SJ.O['Name'] := SO(NULL); 在使用之前,最好先判断 ISuperObject 值 的 datatype是否为 stNull
3、从文件获取JSON对象。ISuperObject不能直接从文件导入JSON信息,必须借助实体类TSuperObject。
var
sj:ISuperObject;
begin
sj := TSuperObject.ParseFile('Json.txt');
end;