当前位置: 首页 > 工具软件 > SuperObject > 使用案例 >

JSon SuperObject 研究

朱风史
2023-12-01

     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;

 类似资料: