2016-12-27 51 views
1

我想读JSON六PHP,但无法解码解码JSON无法通过PHP从URL

<?php 
$json_url = "http://chartapi.finance.yahoo.com/instrument/1.0/AAPL/chartdata;type=quote;range=5d/json"; 
$json = file_get_contents($json_url); 

$data = json_decode($json, TRUE); 
echo "<pre>"; 
print_r($data); 
echo "</pre>"; 

?> 
+2

你也可以找到解码JSONP的一些通用解决方案http://stackoverflow.com/questions/5081557/extract-jsonp-resultset-in-php – Ali

+1

谢谢你的工作 –

回答

2

解码之前处理数据如果您访问您的目标网址,您会发现JSON值被包裹在一个 你可以通过类似

$json = str_replace('finance_charts_json_callback(', '', substr($pageContent, 0, strlen($pageContent) - 1)); 

这里修剪回调方法是如何看起来都放在一起:

<?php 
$json_url = "http://chartapi.finance.yahoo.com/instrument/1.0/AAPL/chartdata;type=quote;range=5d/json"; $pageContent = file_get_contents($json_url); 

$json = str_replace('finance_charts_json_callback(', '', substr($pageContent, 0, strlen($pageContent) - 1)); 

$data = json_decode($json, TRUE); 

echo "<pre>"; print_r($data); echo "</pre>"; 
+0

感谢阿里,它的工作,你能帮我多一点,每5分钟后如何获取$ data'series''close'的最后值,而不是要求为我编码,只是一个想法。 –

+0

让我看看这些数据并回复给你 – Ali

+0

因此,像'$ lastOfSeries = end($ data ['series']);'会将系列中的最后一项存储到$ lastOfSeries变量中 – Ali

1

一个你可以做的一件事就是带着它工作在JavaScript:

<script> 
function finance_charts_json_callback(json){ 
    console.log(json.meta); 
} 
</script> 

<?php 
$json_url = "http://chartapi.finance.yahoo.com/instrument/1.0/AAPL/chartdata;type=quote;range=5d/json"; 
$data = file_get_contents($json_url); 

echo "<script>"; 
print_r($data); 
echo "</script>"; 
?> 

其他事情是尽量去除“功能”部分:

<?php 
$json_url = "http://chartapi.finance.yahoo.com/instrument/1.0/AAPL/chartdata;type=quote;range=5d/json"; 
$json = file_get_contents($json_url); 
$json = substr($json, 30); 
$json = substr($json, 0, strlen($json)-2); 
$data = json_decode($json, TRUE); 
echo "<pre>"; 
print_r($data); 
echo "</pre>"; 

?> 
+0

非常感谢你 –

1

从该服务的响应不是有效的JSON对象的JSONP,你守ld寻找一个提供输出为JSON的服务。

如果他们不提供服务一样,你可以使用此解决办法

$data = str_replace('finance_charts_json_callback(', '', $data); 
$data = str_replace(')', '', $data); 
+0

感谢分享你的知识 –