如何在Delphi 11.3中读取JSON数据仅提取channelname和channelno字段
在Delphi 11.3中提取JSON数据的channelname和channelno字段
直接使用Delphi自带的System.JSON单元即可完成解析,无需依赖第三方库,以下是完整实现方案:
1. 定义数据结构
先定义记录类型存储提取后的频道信息:
type TChannelInfo = record ChannelName: string; ChannelNo: string; end; TChannelInfoArray = array of TChannelInfo;
2. 编写JSON解析函数
该函数接收JSON字符串,解析并提取目标字段:
function ParseChannels(const AJSONStr: string): TChannelInfoArray; var LJSONValue: TJSONValue; LJSONArray: TJSONArray; LJSONObject: TJSONObject; LChannelInfo: TChannelInfo; I: Integer; begin SetLength(Result, 0); LJSONValue := TJSONValue.ParseJSONValue(AJSONStr); try // 校验JSON是否为有效数组 if not Assigned(LJSONValue) or not (LJSONValue is TJSONArray) then Exit; LJSONArray := TJSONArray(LJSONValue); SetLength(Result, LJSONArray.Count); // 遍历数组提取每个对象的目标字段 for I := 0 to LJSONArray.Count - 1 do begin LJSONObject := LJSONArray.Items[I] as TJSONObject; if Assigned(LJSONObject) then begin // 字段不存在时返回空字符串,避免异常 LChannelInfo.ChannelName := LJSONObject.GetValue<string>('channelname', ''); LChannelInfo.ChannelNo := LJSONObject.GetValue<string>('channelno', ''); Result[I] := LChannelInfo; end; end; finally LJSONValue.Free; end; end;
3. 使用示例
在窗体按钮点击事件中调用函数,输出提取结果(以TMemo展示为例):
procedure TForm1.Button1Click(Sender: TObject); const // 目标JSON数据 JSON_DATA = '[ {"channelname": "GOSAT PLUS DOLBY+", "channelno": "DL"}, {"channelname": "GOSAT PLUS ITALY", "channelno": "IT"}, {"channelname": "GOSAT PLUS PREM1", "channelno": "P1"}, {"channelname": "GOSAT PLUS PREM2", "channelno": "P2"}, {"channelname": "GOSAT PLUS PREM3", "channelno": "P3"}, {"channelname": "GOSAT PLUS SSC1", "channelno": "S1"}, {"channelname": "GOSAT PLUS SSCXTRA", "channelno": "SX"}, {"channelname": "GOSAT PLUS VARIETY", "channelno": "GV"}, {"channelname": "GOSAT PLUS 1", "channelno": "1"}, {"channelname": "GOSAT PLUS 2", "channelno": "2"}, {"channelname": "GOSAT PLUS 3", "channelno": "3"}, {"channelname": "GOSAT PLUS 4", "channelno": "4"}, {"channelname": "GOSAT PLUS 5", "channelno": "5"}, {"channelname": "GOSAT PLUS 6", "channelno": "6"}, {"channelname": "GOSAT PLUS 7", "channelno": "7"} ]'; var LChannels: TChannelInfoArray; I: Integer; begin LChannels := ParseChannels(JSON_DATA); // 遍历输出结果,可替换为自定义业务逻辑 for I := 0 to High(LChannels) do begin Memo1.Lines.Add(Format('频道名称: %s, 频道编号: %s', [LChannels[I].ChannelName, LChannels[I].ChannelNo])); end; end;
注意事项
- 确保项目
uses列表中添加System.JSON单元 GetValue<string>是Delphi 10.3+支持的泛型方法,Delphi 11.3完全兼容- 若JSON数据来自文件或网络,需先读取为字符串再传入解析函数
- 代码处理了字段缺失场景,默认返回空字符串,避免程序异常
内容的提问来源于stack exchange,提问作者عبد الرؤوف جلابي
相关产品推荐
相关产品推荐

