You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi中使用TClientDataset获取嵌套JSON字段?

解决嵌套JSON字段的读取问题

针对你遇到的嵌套Department字段无法提取name值的问题,直接修改现有代码即可实现,以下是两种可行方案:

方案一:直接解析JSON字符串(适配现有代码流程)

利用Delphi内置的System.JSON单元解析Department字段的JSON字符串,提取其中的name值:

  1. 确保代码所在单元的uses列表中包含System.JSON;
  2. 修改读取Department字段的代码片段,替换原来的赋值语句:
// 替换原有的Department赋值代码
var
  DeptJSONObj: TJSONObject;
begin
  // ...其他字段赋值逻辑保持不变
  
  if not ClientDataSet.FieldByName('Department').IsNull then
  begin
    // 解析Department字段的JSON字符串
    DeptJSONObj := TJSONObject.ParseJSONValue(ClientDataSet.FieldByName('Department').AsString) as TJSONObject;
    try
      if Assigned(DeptJSONObj) then
        // 提取name字段值
        FieldByName('Department').AsString := DeptJSONObj.GetValue<string>('name');
    finally
      // 释放JSON对象,避免内存泄漏
      DeptJSONObj.Free;
    end;
  end
  else
    FieldByName('Department').Clear;
end;

方案二:通过TRESTResponseDataSetAdapter直接映射嵌套字段(优化数据获取流程)

如果希望在数据适配阶段就直接拿到Department的name值,可以调整TRESTResponseDataSetAdapter的字段映射:

  1. 在TRESTResponseDataSetAdapter的FieldDefs中添加新字段,比如命名为DepartmentName;
  2. 设置该字段的JSONPath属性为$.Department.name(对应JSON结构中的嵌套路径);
  3. 后续直接从ClientDataSet中读取DepartmentName字段的值即可,无需额外解析。

这样可以省去后续手动解析JSON的步骤,让数据适配阶段完成嵌套字段的提取。

内容的提问来源于stack exchange,提问作者vantage111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:12:30