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

如何在Delphi中从指定JSON获取“AUD”值?验证代码正确性

Delphi JSON提取AUD字段问题解答

原代码是否正确?

原代码错误,存在两个关键问题:

  1. 路径层级错误:meta.data不符合JSON结构,meta和data是根对象下的同级属性,并非嵌套关系;
  2. 错误使用数组索引语法{0}:JSON中的data是键值对对象,不是数组,不需要用数组索引访问。

正确实现方式

首先确保代码中引用System.Json单元,然后通过以下步骤提取AUD的code和value:

完整示例代码

var
  JsonStr: string;
  JsonRoot: TJsonValue;
  DataObj, AUDObj: TJsonObject;
begin
  // 目标JSON字符串
  JsonStr := '{"meta":{"last_updated_at":"2024-06-01T23:59:59Z"},"data":{"AUD":{"code":"AUD","value":1.5035301824},"CAD":{"code":"CAD","value":1.3630401556},"EUR":{"code":"EUR","value":0.9217301503},"IDR":{"code":"IDR","value":16238.265355613},"USD":{"code":"USD","value":1}}}';
  
  // 解析JSON字符串
  JsonRoot := TJsonValue.ParseJsonValue(JsonStr);
  try
    if JsonRoot is TJsonObject then
    begin
      // 获取根对象下的data子对象
      DataObj := (JsonRoot as TJsonObject).GetValue<TJsonObject>('data');
      if Assigned(DataObj) then
      begin
        // 获取data下的AUD子对象
        AUDObj := DataObj.GetValue<TJsonObject>('AUD');
        if Assigned(AUDObj) then
        begin
          // 提取code赋值给Label1
          Label1.Caption := AUDObj.GetValue<string>('code');
          // 提取value并转为字符串赋值给Label2
          Label2.Caption := AUDObj.GetValue<Double>('value').ToString;
        end;
      end;
    end;
  finally
    // 释放JSON对象,避免内存泄漏
    JsonRoot.Free;
  end;
end;

关键说明

  • 使用TJsonValue.ParseJsonValue解析JSON字符串,必须在最后释放对象;
  • 通过GetValue<T>方法逐层访问嵌套对象,每一步都要判断对象是否存在(Assigned),防止空指针异常;
  • value是数值类型,需用Double读取后转为字符串再赋值给Label。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:12:21