2011-08-16 105 views
0

由于某种原因json_decode返回NULL与有效的JSON。json_decode返回null与PHP,NFL API

的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)); 
+2

首先检查JSON:'的var_dump($ JSON);' - 它看起来仍然有效? – hakre

+0

@hakre对我来说很不错.. – psarid

+0

如果json坏了,'json_decode'返回NULL。最好再看两遍,放到一些json语法检查器中,应该有一个在线。 **编辑:**我认为[菲尔](http://stackoverflow.com/questions/7072885/json-decode-returns-null-with-php-nfl-api/7072934#7072934)是正确的。 – hakre

回答

2

空数组元素是无效的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 

我不知道这是否会破坏你继续使用数据的能力

+0

谢谢 - 我能做些什么吗? – psarid

+0

@user看我的更新回答 – Phil

+1

我怀疑这些逗号。用一个替代不应该工作,因为这会混淆值的数字索引。如何使元素为空字符串? – hakre

1

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

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

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

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

我相信菲尔能拿出适当的正则表达式,但这种解决方案将保持条目&他们的序号位置的权#。

+0

显然,今天我只是很慢。他更新的答案缓解了原来的问题。 –