【问题标题】:json_decode returns null with PHP, NFL APIjson_decode 使用 PHP、NFL API 返回 null
【发布时间】:2011-08-16 02:06:08
【问题描述】:

由于某种原因,json_decode 使用有效的 JSON 返回 NULL。

json 位于此处:http://www.nfl.com/liveupdate/scorestrip/scorestrip.json

我正在获取页面的文件内容 (file_get_contents),然后在其上运行 json_decode。

还尝试了魔术引号的带斜杠 b/c。

提前致谢, 菲尔

$json = file_get_contents('http://www.nfl.com/liveupdate/scorestrip/scorestrip.json');

var_dump(json_decode($json));

【问题讨论】:

  • 首先检查 json:var_dump($json); - 它看起来仍然有效吗?
  • json_decode 如果 json 损坏,则返回 NULL。最好看两遍,放到一些json语法检查器中,网上应该有一个。 编辑: 我认为Phil 是对的。

标签: php null json


【解决方案1】:

空数组元素是无效的JSON,即多个逗号之间没有值

["Thu","7:30","Final",,"BAL","6","PHI","13",,,"55424",,"PRE1","2011"]
                      ^ Here                ^ Here    ^Here

您可以尝试在多个逗号之间插入空字符串(感谢hakre),即

$json = preg_replace('/,(?=,)/m', ',""', $json);
// I'm dubious about this working, don't have PHP to test but it works in JS

我不知道这是否会影响您继续使用数据的能力

【讨论】:

  • 我也怀疑那些逗号。用一个替换不应该工作,因为这会弄乱值的数字索引。让元素为空字符串怎么样?
【解决方案2】:

我得出了与菲尔相同的结论,但我花了大约 5 分钟的时间。 :)

但是,我注意到他的输出中有一个问题......它正在删除一个字段。

我不喜欢在 RegEx 中进行这种模式检测,只是因为我认为它更难维护。在这种情况下,我只是通过一个 while 循环来运行它。

while (strpos($json,',,'))
{
    $json = str_replace(',,',',"",', $json);
}

我确信 Phil 可以提出适当的 RegEx,但此解决方案将保持正确的条目数及其序数位置。

【讨论】:

  • 显然,我今天的速度很慢。他更新的答案缓解了原来的问题。
【解决方案3】:

对于 2014 年的任何人。新的提要数据链接应该是:

http://www.nfl.com/liveupdate/scores/scores.json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2018-05-27
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多