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

如何解析嵌套JSON?求Pascal语言解析示例代码

Delphi JSON解析示例:获取id和name字段

你的JSON结构是嵌套数组+对象,需要逐层解析才能拿到id和name字段。以下是完整的解析示例代码,包含安全判断和内存释放处理:

var
  jsonObject, resultItem, animalItem: TJsonObject;
  resultArray, animalsArray: TJsonArray;
  i, j: Integer;
  animalId: Integer;
  animalName: string;
begin
  jsonObject := TJsonObject.ParseJSONValue(RestResponse.Content) as TJsonObject;
  if Assigned(jsonObject) then
  try
    // 从顶层对象获取result数组
    resultArray := jsonObject.GetValue<TJsonArray>('result');
    if Assigned(resultArray) then
    begin
      // 遍历result数组中的每个元素
      for i := 0 to resultArray.Count - 1 do
      begin
        resultItem := resultArray.Items[i] as TJsonObject;
        if Assigned(resultItem) then
        begin
          // 从result元素中获取animals数组
          animalsArray := resultItem.GetValue<TJsonArray>('animals');
          if Assigned(animalsArray) then
          begin
            // 遍历animals数组中的每个动物对象
            for j := 0 to animalsArray.Count - 1 do
            begin
              animalItem := animalsArray.Items[j] as TJsonObject;
              if Assigned(animalItem) then
              begin
                // 提取id和name字段值
                animalId := animalItem.GetValue<Integer>('id');
                animalName := animalItem.GetValue<string>('name');
                
                // 这里可以添加业务逻辑,比如输出或存储数据
                Writeln(Format('动物ID: %d, 名称: %s', [animalId, animalName]));
              end;
            end;
          end;
        end;
      end;
    end;
  finally
    jsonObject.Free; // 释放顶层对象,连带释放所有子对象,避免内存泄漏
  end;
end;

关键说明:

  • 逐层解析:先取顶层的result数组,再遍历数组取每个元素里的animals数组,最后遍历animals数组取单个动物对象的字段
  • 安全判断:每一步都用Assigned检查对象/数组是否存在,避免空指针异常
  • 类型安全获取:用GetValue<T>方法直接获取对应类型的字段值,省去手动类型转换的麻烦
  • 内存管理:用try...finally确保JSON对象被正确释放,防止内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:05:32