Получите и покажите данные json из API веб-сайтов в Delphi XE
Я пытаюсь переписать кусок кода, который я написал на Python для Delphi. Код Python:
url = "https://www.bitstamp.net/api/ticker/"
response = urllib.urlopen(url)
data = json.loads(response.read())
lastvalue = data['last']
И этого достаточно, чтобы присвоить переменной "lastvalue" значение, которое я получаю из API-интерфейса битовой метки.
Я хотел бы сделать то же самое с Delphi (я использую Delphi XE6). Я попытался найти какой-то ответ здесь, и я могу подключиться к сайту bittamp и получить полную строку, выполнив это:
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;
Я застрял здесь. Я много искал, но не могу понять, как я могу присвоить Label1.Text только значение, присвоенное "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.
Я надеюсь, что смог объяснить вопрос. Я действительно застрял в этой точке на несколько дней, я надеюсь, что кто-то может мне помочь.
2 ответа
Вы можете использовать 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;
С помощью бесплатного JSON-анализатора с открытым исходным кодом SuperObject код будет:
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'];