将JSON数据的值传递给自由Pascal变量

将JSON数据的值传递给自由Pascal变量,json,lazarus,freepascal,delphi,Json,Lazarus,Freepascal,Delphi,我正试图用免费的Pascal编写一个小程序,以JSON格式获取当前汇率,并使用它们进行简单的货币转换。 我得到了如下信息,它下载了从英镑到波兰兹罗提的汇率,并将其打印到屏幕上 {$mode objfpc}{$H+} uses fphttpclient, fpjson, jsonparser; Var S : String; J: TJSONData; initialAmount, endAmount, rate: real; begin With TFPHttpClient

我正试图用免费的Pascal编写一个小程序,以JSON格式获取当前汇率,并使用它们进行简单的货币转换。 我得到了如下信息,它下载了从英镑到波兰兹罗提的汇率,并将其打印到屏幕上

{$mode objfpc}{$H+}

uses fphttpclient, fpjson, jsonparser;

Var
  S : String;
  J: TJSONData;
  initialAmount, endAmount, rate: real;

begin
  With TFPHttpClient.Create(Nil) do
    try
      S:=Get('http://api.fixer.io/latest?base=GBP');
    finally
      Free;
    end;
    J:= GetJSON(S);
    writeln ('Current exchange rate of GBP to Polish złoty: ',J.FindPath('rates.PLN').AsFloat:2:2);
end. 
我正在努力做的是将汇率的值传递给一个变量,我可以用它进行货币转换

大致如下:

rate := J.FindPath('rates.PLN').AsFloat:2:2;
writeln;
write ('Enter initial amount in GBP £');
readln (initialAmount);
endAmount := initialAmount * rate;
writeln (endAmount);    

有什么建议吗?

除了两个问题外,您建议的代码看起来不错

  • 我希望编译器报告第一个问题:删除
    :2:2
    。IIRC,该符号是为
    WriteLn
    语句保留的

  • 如果您阅读代码,第二个问题应该是显而易见的:在最后一行,您打印的是利率而不是最终金额


  • 啊,我修改了程序的最后一行,以显示最终金额,而不是利率。
    :2:2
    WriteLn
    语句中正确显示小数点后2位的数字。程序的这一部分编译和运行时没有任何问题。问题是代码的第二部分,
    rate:=J.FindPath('rates.PLN')。AsFloat:2:2
    不是将金额传递给变量
    rate
    的有效方法。我只是在。。。您指的是
    :2:2
    行中的
    rate:=J.FindPath('rates.PLN')。AsFloat:2去掉它可以解决问题谢谢。