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


程序调用后的显示效果


-END-

长按下方二维码关注微卡智享

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值