Получите и покажите данные 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'];
Другие вопросы по тегам