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

如何在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,提问作者عبد الرؤوف جلابي

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:34