2015-02-09 51 views
0

任何人都可以摆脱从下面网址1,但不是URL 2为什么json_decode

http://jsonlint.com/ 

http://jsonformatter.curiousconcept.com/ 

是给无效JSON任何光线?它们都是相同的JSON生成代码。唯一的区别是一个是HTTP,一个是HTTP。

https://www.discussthemarket.com/dev/ 
JSON.parse: unexpected character at line 1 column 1 of the JSON data 

http://www.lambwatch.co.uk/json.htm 
Valid JSON 

两者都有其背后的同一JSON生成代码,完全相同的代码,但是当我把网址到

http://jsonlint.com/ 

的验证,HTTPS站点回来了解析错误!?

此外,当我做

$json = json_decode(file_get_contents("https://www.discussthemarket.com/dev/")); 
$json is NULL 

然而

$json = json_decode(file_get_contents("http://www.lambwatch.co.uk/json.htm")); 
$json is the object as you'd expect 

任何人都可以揭示出这个任意光?

+1

这些功能都没有执行任何网络请求,也不关心数据来自哪里,所以没有。 – 2015-02-09 17:23:05

+1

你能和我们分享这个分析错误吗? – castis 2015-02-09 17:23:35

+0

等待您将URL加入http://jsonlint.com/?这是该网站的一个错误 - 我粘贴了来自这两个网站的字符串,并验证了正常。 – 2015-02-09 17:25:06

回答

1

您的问题是,HTTPS服务器正在向输出的开头添加UTF8 BOM字符,因此使预期的JSON响应无效。没有看到代码,它不清楚为什么,但它可能是一个头问题。

如果你无法解决它的服务器端,你总是可以简单地在另一端删除它。 Here is an example

<?php 

$response = file_get_contents('https://www.discussthemarket.com/dev/'); 
$json = remove_utf8_bom($response); 
var_dump(json_decode($json)); 

function remove_utf8_bom($text) { 
    $bom = pack('H*', 'EFBBBF'); 
    $text = preg_replace("/^$bom/", '', $text); 
    return $text; 
} 
+0

谢谢rjdown你已经钉住了它。我会做一些挖掘并尝试摆脱BOM服务器端!欣赏它!当我修复以确认答案时会回复。非常感激。 – 2015-02-09 18:50:13

+0

固定。我在生成代码中遇到了[不结束]问题。排序。谢谢! – 2015-02-09 19:01:51