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

问题描述:

我正试图将免费Pascal中的一个小程序放入JSON格式的Fixer.io当前汇率中,并使用它们进行简单的货币换算。 我已经得到以下,它将英镑兑换成波兰语złoty的汇率并将其打印到屏幕上。将JSON数据的值传递给Free Pascal变量

{$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);  

有什么建议?

您提出的代码看起来很好,除了两个问题。

  1. 我期待编译器报告第一个问题:删除:2:2。 IIRC,该标记保留用于WriteLn声明。

  2. 如果您阅读代码,第二个问题应该是显而易见的:在最后一行,您打印速率而不是最终数量。

+0

嗯,我修改了程序的最后一行来显示结束金额而不是速率。 ':2:2'将数字显示为2位小数,因为它在'WriteLn'语句中。程序的这部分编译和运行没有任何问题。 问题是代码的第二部分,速率:= J.FindPath('rates.PLN')。AsFloat:2:2;'不是一种将变量传递给变量'rate'的有效方法。 – 2015-04-01 10:14:15

+1

我只是很密集...你指的是'rate:= J.FindPath('rates.PLN')这行':2:2'。AsFloat:2:2;'take that出来解决问题谢谢你。 – 2015-04-02 08:43:20