无法通过网址从URL解码json

时间:2016-12-27 18:30:04

标签: php json

我正在尝试阅读json vi php但无法解码

<?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>";

?>

3 个答案:

答案 0 :(得分:2)

如果您访问目标网址,您会注意到JSON值包含在a中 回调方法,您可以通过类似

的方式进行修剪
$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>";

答案 1 :(得分: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>";

?>

答案 2 :(得分:1)

此服务的响应不是其JSONP的有效JSON对象,您应该查找提供输出为JSON的服务。

如果他们不提供类似的服务,您可以在使用此解决方法解码之前操纵数据

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