如何解析嵌套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
相关产品推荐
相关产品推荐

