前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Delphi7用superobject解析Json数据

Delphi7用superobject解析Json数据

作者头像
Vaccae
发布2019-07-25 11:06:08
7K0
发布2019-07-25 11:06:08
举报
文章被收录于专栏:微卡智享微卡智享

前言

现在不管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-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档