我正在尝试将我用Python编写的一段代码重写为Delphi。 Python代码是:
url = "https://www.bitstamp.net/api/ticker/"
response = urllib.urlopen(url)
data = json.loads(response.read())
lastvalue = data['last']
这足以分配给名为" lastvalue"的变量。我从bitstamp的API中获得的价值。
我想用delphi做同样的事情(我使用的是delphi XE6)。我试着在这里找到一些答案,我能够连接到bitstamp的网站并获得完整的字符串,通过这样做:
function GetURLAsString(const aurl: string): string;
var
lHTTP: TIdHTTP;
begin
lHTTP := TIdHTTP.Create(nil);
try
lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
Result := lHTTP.Get(aURL);
finally
lHTTP.Free;
end;
end;
然后我用这个函数调用这个函数:
procedure TForm2.Button1Click(Sender: TObject);
var
mydata : string;
begin
mydata := GetURLAsString('https://www.bitstamp.net/api/ticker/');
Label1.Text := mydata;
end;
我被困在这里。我搜索了很多,但我无法弄清楚如何将Label1Text分配给" last"的值。
当我运行此操作时,我将{"high": "629.40", "last": "622.00", "timestamp": "1401544416", "bid": "621.99", "vwap": "617.47", "volume": "15147.30475739", "low": "602.26", "ask": "622.00"}
分配给Label1.Text。
我希望我能够解释这个问题。我在这一点上真的陷入了困境,我希望有人可以帮助我。
答案 0 :(得分:5)
您可以使用DBXJSON
单元解析JSON响应。
试试这个样本
var
LJsonObj : TJSONObject;
LJsonValue : TJSONValue;
begin
mydata := GetURLAsString('https://www.bitstamp.net/api/ticker/');
LJsonObj := TJSONObject.ParseJSONValue(TEncoding.Default.GetBytes(mydata),0) as TJSONObject;
try
LJsonValue := LJsonObj.Get('last').JsonValue;
Label1.Text:= LJsonValue.Value;
finally
LJsonObj.Free;
end;
end;
答案 1 :(得分:2)
使用SuperObject免费开源JSON解析器,代码为:
var
Mydata: string;
MyObject: ISuperObject;
Last: string;
begin
... // perform GET request and store response in Mydata
MyObject := SO(Mydata);
Last := MyObject.S['last'];
...
或更短:
// get the JSON web resource content
Mydata := GetURLAsString('...');
// get the value of the 'last' property of the object
Last := SO(Mydata).S['last'];