Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在DelphiXe7中从URL检索JSON数据_Json_Delphi_Delphi Xe7 - Fatal编程技术网

在DelphiXe7中从URL检索JSON数据

在DelphiXe7中从URL检索JSON数据,json,delphi,delphi-xe7,Json,Delphi,Delphi Xe7,我正在尝试从URL获取JSON数据。我正在尝试连接的站点是: 它包含以下JSON字符串: { "USD_TO_BSF_RATE": 112268.29, "BTC_TO_USD_RATE": 13870.9, "ETH_TO_USD_RATE": 752.222, "BCH_TO_USD_RATE": 2960.81, "LTC_TO_USD_RATE": 272.476, "XRP_TO_USD_RATE": 1.01954, "ETC_TO_USD_RATE":

我正在尝试从URL获取JSON数据。我正在尝试连接的站点是:

它包含以下JSON字符串:

{
  "USD_TO_BSF_RATE": 112268.29,
  "BTC_TO_USD_RATE": 13870.9,
  "ETH_TO_USD_RATE": 752.222,
  "BCH_TO_USD_RATE": 2960.81,
  "LTC_TO_USD_RATE": 272.476,
  "XRP_TO_USD_RATE": 1.01954,
  "ETC_TO_USD_RATE": 31.1101,
  "DASH_TO_USD_RATE": 1178.0,
  "ZEC_TO_USD_RATE": 561.377,
  "XMR_TO_USD_RATE": 354.709
}
我需要获得USD_to_BSF_RATE的值,在我提到的站点中每5分钟更新一次。我的代码如下所示:

使用 ... System.JSON,IdHTTP; 函数GetUrlContents:string:string; 变量 IdHTTP1:TIdHTTP; 开始 IdHTTP1.创建; GetUrlContent:=IdHTTP1.Gets; IdHTTP1.销毁; 终止 程序更新; 变量 json:string; 对象:TJSONObject; url:string; 开始 尝试 json:=GetUrlContent'http://www.bitven.com/assets/js/rates.js'; 尝试 obj:=TJSONObject.ParseJSONValuejson作为TJSONObject; TabbedForm.Edit2.Text:=对象值['USD_TO_BSF_RATE']。值; 最后 对象自由; 终止 除了 关于E:Exception-do 开始 ShowMessage'Error'+sLineBreak+E.ClassName+sLineBreak+E.Message; 终止 终止 终止 我的应用程序无法正常运行,也无法返回任何消息。它只会崩溃

我做错了什么?

您的GetUrlContent函数编码不正确。它需要看起来像这样:

function GetUrlContent(s: string): string;
var
  IdHTTP1: TIdHTTP;
begin
  IdHTTP1 := TIdHTTP.Create;
  try
    Result := IdHTTP1.Get(s);
  finally
    IdHTTP1.Free;
  end;
end;
procedure DolarUpdate;
var
  json: string;
  obj: TJSONObject;
  url: string;
begin
  try
    json := GetUrlContent('http://www.bitven.com/assets/js/rates.js');
    obj := TJSONObject.ParseJSONValue(json) as TJSONObject;
    if obj = nil then raise Exception.Create('Error parsing JSON');
    try
      TabbedForm.Edit2.Text := obj.Values['USD_TO_BSF_RATE'].Value;
    finally
      obj.Free;
    end;
  except
    on E : Exception do
    begin
      ShowMessage('Error' + sLineBreak + E.ClassName + sLineBreak + E.Message);
    end;
  end;
end;
您的DolarUpdate过程应该更像这样:

function GetUrlContent(s: string): string;
var
  IdHTTP1: TIdHTTP;
begin
  IdHTTP1 := TIdHTTP.Create;
  try
    Result := IdHTTP1.Get(s);
  finally
    IdHTTP1.Free;
  end;
end;
procedure DolarUpdate;
var
  json: string;
  obj: TJSONObject;
  url: string;
begin
  try
    json := GetUrlContent('http://www.bitven.com/assets/js/rates.js');
    obj := TJSONObject.ParseJSONValue(json) as TJSONObject;
    if obj = nil then raise Exception.Create('Error parsing JSON');
    try
      TabbedForm.Edit2.Text := obj.Values['USD_TO_BSF_RATE'].Value;
    finally
      obj.Free;
    end;
  except
    on E : Exception do
    begin
      ShowMessage('Error' + sLineBreak + E.ClassName + sLineBreak + E.Message);
    end;
  end;
end;

当你的函数崩溃时,错误消息是什么?根本没有消息我不相信你。将出现访问冲突。事实上,另一个错误仍然存在。当我修改Edit2的内容并再次按下按钮时,程序崩溃。