Delphi中是否有更便捷的嵌套JSON创建方式?
优化Delphi嵌套JSON对象的创建写法
你可以通过直接保存子对象引用或者链式嵌套创建的方式,避免反复调用GetValue查找子对象,让代码更简洁高效:
方法一:用变量保存子对象引用
这种方式可读性强,逻辑清晰,适合层级较多的场景:
var jo, dataObj, detailsObj: TJsonObject; begin try jo := TJsonObject.Create; // 创建并保存data子对象 dataObj := TJsonObject.Create; jo.AddPair('data', dataObj); // 创建并保存details子对象 detailsObj := TJsonObject.Create; dataObj.AddPair('details', detailsObj); // 直接操作details子对象 detailsObj.AddPair('foo', 'bar'); finally FreeAndNil(jo); end; end;
方法二:链式嵌套创建
如果层级不多,这种写法更紧凑,无需额外变量:
var jo: TJsonObject; begin try jo := TJsonObject.Create; jo.AddPair('data', TJsonObject.Create.AddPair('details', TJsonObject.Create.AddPair('foo', 'bar'))); finally FreeAndNil(jo); end; end;
注:Delphi的
TJSONObject.AddPair会返回当前对象本身(支持链式调用),所以可以直接在创建子对象后连续调用AddPair。父对象释放时会自动递归释放所有子对象,无需手动释放子节点。
方法三:利用TJSONObject的构造函数重载(Delphi 10.3+)
部分Delphi版本支持直接在构造函数中传入键值对,进一步简化:
var jo: TJsonObject; begin try jo := TJsonObject.Create( TJSONPair.Create('data', TJsonObject.Create( TJSONPair.Create('details', TJsonObject.Create( TJSONPair.Create('foo', 'bar') )) )) ); finally FreeAndNil(jo); end; end;
这几种写法都能生成你需要的JSON结构,且避免了GetValue的查找操作,代码结构更简洁高效。
内容的提问来源于stack exchange,提问作者Magnus
相关产品推荐
相关产品推荐

