2013-11-23 65 views
3

一位朋友问我一个简单的代码来抓取网站的值,没有问题。 本网站使用的是json API,同样没有问题。json_decode和浮点值

但是,解析结果后,我认为值都是错误的。

例子:

的JSON的值是846.51,但我的脚本返回844.71。

我当前的“代码”:

$data = file_get_contents('https://blockchain.info/fr/ticker'); 
$json = json_decode($data); 

print_r($json->{'USD'}->{'15m'}); 

所以,我搜索,我发现它可能是一个PHP错误与x64处理器,不知道。

任何解决方法来解决这个问题?

+0

我在64x机器上,我遇到没有这样的问题。 – Daedalus

+2

你确定这是一个无论什么类型的错误,而不仅仅是改变数据或错误的字段被抓取? –

+1

“相关”栏包含很好的相关问题。 [防止PHP解析浮动作为json_decode中的浮动](http://stackoverflow.com/q/9497743),[PHP函数json_decode解码浮点值后零点为int](http://stackoverflow.com/q/ 12531828) –

回答

1

所以!这确实是根据https://bugs.php.net/bug.php?id=50224

这里是固定版本的PHP错误:

$data = file_get_contents('https://blockchain.info/fr/ticker'); 
$res = preg_replace('/":(\d+)/', '":"\1"', $data); 
$json = json_decode($res); 

print_r($json->{'EUR'}->{'15m'}); 
0

约翰Konolol完善答案:如果该值在SCI格式表示的floatting十进制数的正则表达式将无法正常工作( “2.038069541E9”)。

正则表达式必须是:

preg_replace('/":(\d+\.*\d*E*e*\d*)/', '":"\1"', $data) 

将所有数字转换为字符串,包括浮点数(1.34)或SCI格式NUMER(1E3),这是一个JSON有效。