【问题标题】:unable to decode json via php from url无法通过 php 从 url 解码 json
【发布时间】:2017-05-12 01:06:12
【问题描述】:

我正在尝试读取 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>";

?>

【问题讨论】:

标签: php json


【解决方案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】:

    来自此服务的响应不是其 JSONP 的有效 JSON 对象,您应该寻找以 JSON 格式提供输出的服务。

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

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

    【讨论】:

      【解决方案3】:

      如果您访问目标 URL,您会注意到 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>";
      

      【讨论】:

      • 谢谢 ali,它有效,你能帮我多一点吗,如何在每 5 分钟后获取 $data 'series' 'close' 的最后一个值,而不是要求为我编码,只是一个想法。
      • 让我看看数据再回复你
      • 所以像$lastOfSeries = end($data['series']); 这样的东西会将系列中的最后一项存储到 $lastOfSeries 变量中
      猜你喜欢
      • 2015-10-24
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多