这期内容当中小编将会给大家带来有关Delphi7怎样用superobject解析Json数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
前言
现在不管Webapi还是一般的数据通讯,用的基本都是Json,以前很多的应用程序都是用delphi7开发的,为了维护旧的程序以及与新的接口进行对接(如微信支付宝支付等),我们就用到了superobject来操作Json数据。
由于我们用的是D7,里面没有泛型等这些用法,所以也不存在什么类的序列化与反序列化直接生成Json。操作起来可能比较C#,Android等要麻烦点。
superobject单元
这个可以在网上下载,后面我们会这个unit放到我的网盘上,这里我们用到的是
就是上面这个superobject.pas,我的版本是1.25的,原来用了个1.24的里面有几个小BUG(如Currency类型的输入0解析不了),在1.25里面解决了。
基本用法
var
j, a: ISuperObject;
//不能是TSuperObject,尽管有TSuperObject这个类。
begin
j:=TSuperObject.Create(stObject);
//创建一个json对象,如果参数是stArray,j就是一个json数组,参数还可以是其它的变量类型,比如字符串,数值之类的,看起来很强大,但是如果参数是一个描述了json的字符串的话,你会得到一个错误。如果想从文本加载,用j:=SO(json文本);
j.I['数字']:=123;
//就等于 {"数字": 123} ,类似的,I还可以变成S,B,C之类的,以表示字符串,布尔型,货币型。
j.S['字符串']:="值";
//就等于 {"字符串": “值”} ,类似的,I还可以变成S,B,C之类的,以表示字符串,布尔型,货币型。
a:=TSuperObject.Create(stArray);
//创建一个json数组a
a.I['']:=111;
//表示给a数组添加一个111元素。注意[]中的值为'',在数组中其[]的语义进行了颠覆性的改变。
a.I[2]:="s";
//第3个元素值为"s",嗯,[]在superobject的用法还真多
j['arr']:=a;
//把数组a添加进j,其key名为arr
showmessage( j.toJson() );
//查看j的json文本
j:=nil;
//不能写j.Free
end;
代码演示
因为这是在项目的边做边写的,所以我们还是用上一章的《Delphi调用动态链接库》PosPayIntf动态库项目,先看一下我们的目录结构
我们把Json这块的处理都放在了BaseClass下的Json文件夹下
其中superobject就是我们引用的Json解析单元,DoJson是我自己封装的几个处理返回的方法。
在动态库的项目里面我们可以看到已经把这两个单元文件引用进来了。
DoJson单元
在这个单元里面我写了三个函数
GetJsonStr;获取Json对应的项目下的字符串
CreateOutMsgJsonStr;生成输出的OutMsg的Json字符串
CreateOutParaJsonStr;生成输出OutParaJsonStr的字符串
GetJsonStr
根据输入的Json字符串,我们找到指定的属性来获取对应的字符串
如下
上面传入的这个Json的字符串
我们通过下面方法获取对应的值
第一个GetJsonStr(Inparastr,'payinfo'),调用这个后我们的tmpParaStr得到的字符串就变成{"oldsaleno":"","payamt":387.6,"oldposno":"","oldpayno":"","salen
o":"201708181158150001","oldsaledate":"","oldrefinfo":""}
第二个GetJsonStr(tmppParaStr,'Payamt'),调用这个后我们的PayTotal值就获取到了387.6,然后我们再把字符串转换为Currency类型即可。
OutParaJsonStr
接口文档
生成函数
上在就是一个生成Json字符串的函数
这个参数后面几个我都有加上默认值,所以在调用的时候如果不用输这些参数就直接给的默认值
调用方法
返回的Json
CreateOutMsgJsonStr
这个方法和上面这个基本一样,只不通参数不同
接口文档
接口函数
调用方法
返回的Json
程序调用后的显示效果
上述就是小编为大家分享的Delphi7怎样用superobject解析Json数据了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。