爱玩科技网
您的当前位置:首页JSon SuperObject 研究

JSon SuperObject 研究

来源:爱玩科技网
 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;

因篇幅问题不能全部显示,请点此查看更多更全内容