Delphi中使用ISuperObject解析Json数据的实现代码

发布时间 - 2026-01-11 03:24:32    点击率:

Java、Php等语言中都有成熟的框架来解析Json数据,可以让我们使用很少的代码就把格式化好的json数据转换成程序可识别的对象或者属性,同时delphi中也有这样的组件来实现此功能,即IsuperObject。如果还没有这个组件的请在网上搜索下载或者在下面留言处留下你的邮箱向本人索取。

下面先说一下ISuperObject中几个常用的函数

function SO(const s: SOString = ‘{}'): ISuperObject; overload; 此函数传入json数据字符串,并返回一个ISuperObject对象,这一般是我们解析json时使用的第一个函数,如jObj := SO(jsonstr)。

property O[const path: SOString]: ISuperObject read GetO write PutO; default; 如:jobj.O[‘username'],此函数被一个ISuperObject对象调用,方括号内的字符串为json中的字段名称,返回一个ISuperObject对象。

property S[const path: SOString]: SOString read GetS write PutS; 此函数被一个ISuperObject对象调用,和O[‘username']不同的是,它返回的是一个SoString,即一个字符串,使用方法 str := jObj.S[‘username']; 同理的还有其他几个类似的函数,如I[‘age']返回整数,B[‘isenable']返回布尔型,A[‘users']返回一个TSuperArray数组
AsString, AsBoolean, AsInteger,AsArray,ISuperObject的函数,用来把ISuperObject转换成相应的数据类型。

下面我们看一个演示代码,json数据如下

{
  "retcode": "1", 
  "datafrom": "server",
  "users": "[{\"id\":1, \"username\": \"liuderu\", \"website\": \"bcoder.com\"},{\"id\":2, \"username\": \"Jeoe\", \"website\": \"baidu.com\"}]"
}

Delphi版本2010,代码如下:

unit uFmMain;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, Buttons, superobject;

type
 TFmMain = class(TForm)
  Memo1: TMemo;
  ListView1: TListView;
  BitBtn1: TBitBtn;
  Label1: TLabel;
  procedure BitBtn1Click(Sender: TObject);
 private
  { Private declarations }
 public
  { Public declarations }
 end;

var
 FmMain: TFmMain;

implementation

{$R *.dfm}

procedure TFmMain.BitBtn1Click(Sender: TObject);
var
 jRet, jUsers: ISuperObject;
 aryUsers: TSuperArray;
 retCode: integer;
 strUsers: string;
 i: integer;
begin
 jRet := SO(Memo1.Text);
 if (jRet.O['retcode'] <> nil) then begin
  retCode := jRet.O['retcode'].AsInteger;
  Label1.Caption := '返回值:' + IntToStr(retCode) + '; 数据来源:' + jRet.O['datafrom'].AsString;

  if(jRet.O['retcode'].AsInteger = 1) then begin
   strUsers := jRet.O['users'].AsString;
   jUsers := SO(strUsers);
   aryUsers := jUsers.AsArray;
   for I := 0 to aryUsers.Length - 1 do begin
    with ListView1.Items.Add do begin
     Caption := aryUsers[i].O['id'].AsString;
     SubItems.Add(aryUsers[i].O['username'].AsString);
     SubItems.Add(aryUsers[i].O['website'].AsString);
    end;
   end;
  end;
 end;
end;

end.

一个简单的Delphi使用ISuperObject解析json的例子:Delphi_Json_jb51.rar


# Delphi  # ISuperObject  # 自定义spring mvc的json视图实现思路解析  # C#实现json格式数据解析功能的方法详解  # 实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法)  # jquery利用json实现页面之间传值的实例解析  # JSONP跨域的原理解析及其实现介绍  # android客户端从服务器端获取json数据并解析的实现代码  # JS解析json数据并将json字符串转化为数组的实现方法  # 关于JSON解析的实现过程解析  # 的是  # 几个  # 转换成  # 这一  # 还没有  # 也有  # 第一个  # 让我们  # 请在  # 就把  # 布尔  # 来实现  # 中都  # 先说  # 返回值  # 括号内  # 网上  # br  # js  # AsString 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: C语言设计一个闪闪的圣诞树  如何快速搭建虚拟主机网站?新手必看指南  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何快速重置建站主机并恢复默认配置?  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  如何在建站主机中优化服务器配置?  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Laravel如何使用Sanctum进行API认证?(SPA实战)  如何用景安虚拟主机手机版绑定域名建站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  HTML 中如何正确使用模板变量为元素的 name 属性赋值  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  EditPlus 正则表达式 实战(3)  Laravel怎么实现验证码(Captcha)功能  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Swift中switch语句区间和元组模式匹配  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何在万网主机上快速搭建网站?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  如何快速生成橙子建站落地页链接?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何快速选择适合个人网站的云服务器配置?  JavaScript如何实现继承_有哪些常用方法  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  java获取注册ip实例  微信小程序 wx.uploadFile无法上传解决办法  在centOS 7安装mysql 5.7的详细教程  javascript中对象的定义、使用以及对象和原型链操作小结  Python制作简易注册登录系统  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何在香港服务器上快速搭建免备案网站?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何快速搭建安全的FTP站点?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  JavaScript如何实现路由_前端路由原理是什么  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  如何彻底卸载建站之星软件?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何快速使用云服务器搭建个人网站?  详解Android——蓝牙技术 带你实现终端间数据传输  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  高防服务器租用首荐平台,企业级优惠套餐快速部署