Delphi 操作 JSON 超详细教程:解析、生成、对接接口必学!

大家好,我们继续 Delphi 从入门到实战系列。

前面我们学了:基础入门、记事本、数据库、串口、软件美化、网络请求、打包、异常与多线程。

而现在几乎所有接口、APP、后台通信,全都用JSON

如果你想做:对接 API、爬虫、登录、数据上传、小程序 / 网站交互,必须会 JSON

这篇我用最简单、最实用、不绕弯的方式,教你 Delphi 原生操作 JSON,不用任何第三方控件,直接复制就能用。

一、Delphi 用哪个单元处理 JSON?

高版本 Delphi(XE7 以上,包括 10.2/10.3/10.4/11)都自带:

delphi

uses

  System.JSON; // 只要引用这一个

不用引用奇怪的第三方库,原生最稳定

本篇所有代码,都基于这个官方单元。

二、先做界面(非常简单)

拖这几个控件到窗体:

Button1:生成 JSON

Button2:解析 JSON

Memo1:显示结果

就够了。

三、实战 1:生成一段 JSON(发给接口用)

我们要生成这样一段 JSON:

json

{"code":200,"msg":"请求成功","data":{"name":"小明","age":20,"isStudent":true}}

直接复制代码:

delphi

// 生成 JSON

procedure TForm1.Button1Click(Sender: TObject);

var

  RootObj, DataObj: TJSONObject;

begin

  RootObj := TJSONObject.Create;

  DataObj := TJSONObject.Create;

  try

    // 外层字段

    RootObj.AddPair('code', TJSONNumber.Create(200));

    RootObj.AddPair('msg', '请求成功');

    // 内层 data 对象

    DataObj.AddPair('name', '小明');

    DataObj.AddPair('age', TJSONNumber.Create(20));

    DataObj.AddPair('isStudent', TJSONBool.Create(True));

    RootObj.AddPair('data', DataObj);

    // 显示到Memo

    Memo1.Lines.Text := RootObj.Format(2);

  finally

    RootObj.Free; // 会自动释放 DataObj

  end;

end;

运行点击按钮,标准 JSON 直接出来

四、实战 2:解析一段 JSON(最常用!)

这是你做接口、爬虫90% 的场景

拿到一段 JSON 字符串,把里面的值取出来。

示例 JSON 字符串:

json

{"code":200,"msg":"success","data":{"username":"test123","score":95.5}}

解析代码:

delphi

// 解析 JSON

procedure TForm1.Button2Click(Sender: TObject);

var

  RootObj: TJSONObject;

  DataObj: TJSONObject;

  code: Integer;

  msg, username: string;

  score: Double;

begin

  RootObj := TJSONObject.ParseJSONValue(Memo1.Lines.Text) as TJSONObject;

  if RootObj = nil then Exit;

  try

    // 读取外层

    code := RootObj.GetValue<Integer>('code');

    msg  := RootObj.GetValue<string>('msg');

    Memo1.Lines.Add('======== 解析结果 ========');

    Memo1.Lines.Add('状态码:' + IntToStr(code));

    Memo1.Lines.Add('提示信息:' + msg);

    // 读取内层 data

    DataObj := RootObj.GetValue<TJSONObject>('data');

    if Assigned(DataObj) then

    begin

      username := DataObj.GetValue<string>('username');

      score    := DataObj.GetValue<Double>('score');

      Memo1.Lines.Add('用户名:' + username);

      Memo1.Lines.Add('分数:' + FloatToStr(score));

    end;

  finally

    RootObj.Free;

  end;

end;

你只要改:

'code'、'msg'、'data'、'username'

就能适配任何接口

三、实战 3:解析 JSON 数组(列表必用)

很多接口返回列表,比如:

json

{"list":[{"name":"张三","age":18},{"name":"李四","age":19}]}

解析数组代码:

delphi

procedure TForm1.Button3Click(Sender: TObject);

var

  RootObj: TJSONObject;

  Arr: TJSONArray;

  I: Integer;

  name: string;

  age: Integer;

begin

  RootObj := TJSONObject.ParseJSONValue(Memo1.Lines.Text) as TJSONObject;

  if RootObj = nil then Exit;

  try

    Arr := RootObj.GetValue<TJSONArray>('list');

    if Assigned(Arr) then

    begin

      for I := 0 to Arr.Count - 1 do

      begin

        name := Arr.Items[I].GetValue<string>('name');

        age  := Arr.Items[I].GetValue<Integer>('age');

        Memo1.Lines.Add(Format('姓名:%s,年龄:%d', [name, age]));

      end;

    end;

  finally

    RootObj.Free;

  end;

end;

这就是做:

用户列表、订单、商品、日志、数据展示的核心代码。

四、新手最容易犯的 3 个错误

忘记释放对象

TJSONObject 一定要用 try…finally 并 Free,否则内存泄漏。

字段名写错

'username'≠'UserName',JSON 区分大小写。

类型不匹配

数字用:GetValue<Integer>或GetValue<Double>

布尔用:GetValue<Boolean>

五、学完 JSON 你能做什么?

对接网站 / 后台 API

做登录、注册、查询接口工具

爬虫解析网页返回的 JSON

小程序、APP 和桌面软件通信

自己写客户端 + 服务端

可以说:学会 JSON,才算真正会写联网软件

六、本篇总结casii-cd.com

Delphi 自带System.JSON,不用第三方库

生成 JSON:TJSONObject.AddPair。

解析 JSON:GetValue<类型>。

解析列表:TJSONArray循环遍历。

代码简单、通用、企业项目直接用www.xc.gx.cn

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容