Delphi SuperObject json操作类的基本用法
Delphi2009中开始提供了json支持,但并不完善,提供的单元为(Delphi 2009-Delphi XE4 为DBXJson,很不好用,当时据说是为Datasnap开发准备,方法功能不完善,缺少比如XE5以上版本(System.json)中所提供的GetValue等方法。所以经过各种测试json官方提供的几个单元,比如ljkjson等。最终发现还是SuperObject最好用。简单整理一下使用方法:
(* ISuperObject中几个常用的函数: * 此函数传入json数据字符串,并返回一个ISuperObject对象, * 这一般是我们解析json时使用的第一个函数,如jObj := SO(jsonstr)。 function SO(const s: SOString = '{}'): ISuperObject; overload; * 方括号内的字符串为json中的字段名称,返回一个ISuperObject对象。如:jobj.O['username'], property O[const path: SOString]: ISuperObject read GetO write PutO; default; * 和O['username']不同的是,它返回的是一个SoString, * 即一个字符串,使用方法 str := jObj.S['username']; * 同理的还有其他几个类似的函数,如I['age']返回整数,B['isenable']返回布尔型,A['users']返回一个TSuperArray数组 property S[const path: SOString]: SOString read GetS write PutS; * ISuperObject的函数,用来把ISuperObject转换成相应的数据类型。 AsString, AsBoolean, AsInteger,AsArray, *)
var jo, jf: ISuperObject; ja: TSuperArray; s,sColName,sValue: string; //------------------------------ //取某节点下字段列表 jo := SO(AJson); //载入JSON字符串 //ja:= jo['DATA'].AsArray; //取某节点下所有数据并序列化 ja:= jo.A['DATA']; //跟上面的效果一样 ja:=SO(AJson).AsArray; //无节点json字符串序列化 jf := ja.O[0]; //取DATA节点下第一条记录 ColList:=TStringList.Create; for i := 0 to jf.AsObject.count - 1 do begin ColList.Add(jf.AsObject.GetNames.AsArray[i].AsString ); //逐一取DATA节点下jf下的字段名 //jf.AsObject.GetValues.AsArray[i].AsString; //逐一取DATA节点下jf下的字段值 end; showmessage(ColList.Text); 返回字段值: CpnID ShortName FullName showmessage(jf.AsString); 返回值: {"FullName":"宝沪国际(A)貿易有限公司","ShortName":"宝沪国际-A","CpnID":"BHA"} //---------------------------------------------------- sColName :=jf.AsObject.GetNames.AsString; showmessage(sColName); 返回值: ["FullName","ShortName","CpnID"] //---------------------------------------------------- sValue:=jf.AsObject.GetValues.AsString ; showmessage(sValue); 返回值: ["宝沪国际(A)貿易有限公司","宝沪国际-A","BHA"] //---------------------------------------------------- jf.AsObject.GetValues.AsArray[k].AsString; //取DATA节点下的字段值
节点循环取值示例:
procedure TForm1.Button7Click(Sender: TObject); var jo: ISuperObject; i: integer; begin jo := SO('{"A":1, B:2, C:3, D:4,E:5,F:6}'); Memo2.Clear; for i := jo.AsObject.count - 1 downto 0 do begin Memo2.Lines.Add(jo.AsObject.GetNames.AsArray[i].AsString + ':' + jo.AsObject.GetValues.AsArray[i].AsString); end; Memo2.Lines.Add(jo.S['E']); //取E的值 5 for i := jo.AsObject.count - 1 downto 0 do begin Memo2.Lines.Add(jo.AsObject.GetNames.AsArray[i].AsString ); end; //Memo2.Lines.Add(jo.S['E']); //取E的值 5 end;
执行结果:
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751928.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)