Translate

2017/06/26

JSON Parse in Delphi XE (01)

在 Delphi.ktop 的主題中,看到了【JSON求教】這一篇

如果在 XE 裡面要實現,是不是也是這麼簡單?

想到了,就開始來實作吧!


首先是 Download 的部份:
procedure TForm1.Button1Click(Sender: TObject);
var
  ss: string;
  ssm: TStringStream;
begin
  Memo1.Clear;
  ssm := TStringStream.Create('', TEncoding.UTF8);
  ss := IdHTTP1.Get('https://blockchain.info/ticker');
  IdHTTP1.Get('https://blockchain.info/ticker', ssm);
  Memo1.Lines.Add(ssm.DataString);
  ssm.Free;
end;

接著是 JSON Parse 的部份:
procedure TForm1.Button2Click(Sender: TObject);
var
  LJSObj, LJSSubObj: TJSONObject;
  LJSPair: TJSONPair;
  LJSVal: TJSONValue;
  LPos01: Integer;
  LStr: string;
begin
  LJSObj := TJSONObject.ParseJSONValueUTF8(TEncoding.UTF8.GetBytes(Memo1.Text), 0) as TJSONObject;
  Memo1.Clear;
  if LJSObj <> nil then
  begin
    for LPos01 := 0 to LJSObj.Size-1 do
    begin
      try
        LJSPair := LJSObj.Get(LPos01);
        LJSSubObj := LJSPair.JsonValue as TJSONObject;
        LStr := LJSSubObj.Get('15m').JsonValue.Value;
        Memo1.Lines.Add(LJSSubObj.Get('15m').JsonValue.Value);
        Memo1.Lines.Add(LJSSubObj.Get('last').JsonValue.Value);
        Memo1.Lines.Add(LJSSubObj.Get('buy').JsonValue.Value);
        Memo1.Lines.Add(LJSSubObj.Get('sell').JsonValue.Value);
        Memo1.Lines.Add(LJSSubObj.Get('symbol').JsonValue.Value);
      except
        on E: Exception do
        begin
          Memo1.Lines.Add('Error: '+LJSSubObj.ToString);
          Exit;
        end;
      end;
    end;
  end;
end;

和前版的 Delphi 有很大的落差,畢竟新版擴充的更加完美,但現階段仍然可以解決解析的問題。


於是我們就得到了以下的內容:
解析後的結果

 得到了一個例外,看來是 UNICODE 的問題,到底該怎麼解呢?

欲知詳情,我們下回待續!

沒有留言:

張貼留言

Why I Choose Delphi! (CHT)

扣除使用 C++ Builder 的時間,我實際使用 Delphi 的時間點是 2012 年,它帶我看到了不一樣的世界,見識到世界各地的高手使用 Delphi 創造出他們引以為豪的產品,並且無私的分享他們的學習知識,使我的技術能力得以跟隨他們的能力提升。 最最讓我喜歡的...