1. 项目背景与需求分析
在Delphi开发生态中,处理JSON数据一直是个既基础又头疼的问题。System.JSON单元作为Delphi自带的JSON处理模块,虽然功能完整但API设计过于底层,用起来总感觉不够顺手。每次处理JSON都要写一堆繁琐的代码,就像用螺丝刀当餐具吃饭——能完成任务,但体验实在说不上好。
这个封装库的诞生,正是为了解决Delphi开发者日常遇到的几个典型痛点:
- 创建嵌套JSON结构时需要反复实例化TJSONObject/TJSONArray
- 读取深层属性必须手动逐级判断是否存在
- 类型转换需要显式调用AsString/AsInteger等方法
- 缺少链式调用等现代API设计
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计
2.1 基础封装策略
库的核心是对System.JSON单元的二次封装,采用装饰器模式(Decorator Pattern)进行设计。这种设计有三大优势:
- 完全兼容原生JSON对象
- 不引入额外依赖
- 保持轻量级特性
主要类结构如下:
pascal复制TJsonHelper = class helper for TJSONValue
// 扩展方法...
end;
TJsonWrapper = class(TInterfacedObject, IJsonObject)
private
FJson: TJSONObject;
public
// 封装方法...
end;
2.2 关键API设计
2.2.1 构建器模式(Builder Pattern)应用
pascal复制// 传统方式
var
Json: TJSONObject;
begin
Json := TJSONObject.Create;
Json.AddPair('name', '张三');
Json.AddPair('age', TJSONNumber.Create(25));
// 嵌套对象
var Addr := TJSONObject.Create;
Addr.AddPair('city', '北京');
Json.AddPair('address', Addr);
end;
// 新封装方式
var
Json: IJsonObject;
begin
Json := TJson.NewObject
.Add('name', '张三')
.Add('age', 25)
.AddObject('address',
TJson.NewObject.Add('city', '北京'));
end;
2.2.2 安全访问模式
pascal复制// 传统方式
var
Age: Integer;
begin
if (Json.TryGetValue('age', AgeVal) and (AgeVal is TJSONNumber)) then
Age := (AgeVal as TJSONNumber).AsInt;
end;
// 新封装方式
Age := Json.GetValue('age').AsInteger(0); // 带默认值
3. 关键技术实现
3.1 类型自动推断
通过重载的Add方法实现类型自动判断:
pascal复制function Add(const Name: string; Value: Integer): IJsonObject; overload;
function Add(const Name: string; Value: Boolean): IJsonObject; overload;
function Add(const Name: string; const Value: string): IJsonObject; overload;
内部实现使用RTTI进行类型判断:
pascal复制procedure AddValue(const Name: string; Value: Variant);
begin
case VarType(Value) of
varInteger: FJson.AddPair(Name, TJSONNumber.Create(Value));
varString: FJson.AddPair(Name, TJSONString.Create(Value));
// 其他类型处理...
end;
end;
3.2 链式调用实现
关键技巧是每个方法都返回接口自身:
pascal复制function IJsonObje
