在DelphiXe7中从URL检索JSON数据
我正在尝试从URL获取JSON数据。我正在尝试连接的站点是: 它包含以下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":
{
"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的内容并再次按下按钮时,程序崩溃。