【问题标题】:Problem parsing JSON data from external url in PHP在 PHP 中从外部 url 解析 JSON 数据的问题
【发布时间】:2019-05-01 21:44:46
【问题描述】:

我对 json 代码甚至 javascript 代码都非常陌生,但到目前为止我已经掌握了这一点。 我可以从具有相同信息的本地文件中获取 json 数据,但不能从以下外部 URL 获取:https://s3.amazonaws.com/dolartoday/data.json

这是我的代码:

<?php

$json = file_get_contents("https://s3.amazonaws.com/dolartoday/data.json", 'jsonp');
$data = json_decode($json, true);

echo $data['USD']['dolartoday'];

?>

预期结果,如下所示:6124.24

注意:这段代码没问题,我从本地文件中获取具有相同值的数据,但我无法专门从这个外部 URL 获取 json 数据。 我还添加了“jsonp”,但没有用。

【问题讨论】:

    标签: php json


    【解决方案1】:

    您在 S3 上的 JSON 文档无效。

    JSON 必须采用 UTF-8 格式,但您似乎在其中包含扩展的 ASCII 字符。

    正确的错误检查会发现这一点。

    $data = json_decode($json, true);
    if (is_null($data)) {
        echo json_last_error_msg();
        die;
    }
    

    会打印出来的

    Malformed UTF-8 characters, possibly incorrectly encoded
    

    【讨论】:

    • 如果在 >PHP 7.3 上,那么您可以使用标志 JSON_THROW_ON_ERROR
    • 如果在 PHP 7.2 或更高版本上,您可以传递 JSON_INVALID_UTF8_IGNORE 选项
    • 谢谢@Stephen Clouse 我不知道。
    • 我应该澄清过去允许使用其他编码,但 UTF-8 是唯一在其整个生命周期内一直作为规范一部分的编码,因此它是唯一有保证的可互操作编码。 JSON 规范 (RFC 8259) 的最新版本澄清了这一点,并基本上要求 UTF-8 作为唯一受支持的编码。
    【解决方案2】:

    感谢@Stephen 的澄清,我找到了解决问题的方法。

    <?php
    $json = file_get_contents("https://s3.amazonaws.com/dolartoday/data.json", 'jsonp');
    $utf8 = utf8_decode($json); //decode UTF-8
    $data = json_decode($utf8, true);
    
    echo $data['USD']['dolartoday'];
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多