Php JSON无效(JSONview),但我不知道';我不知道怎么做

Php JSON无效(JSONview),但我不知道';我不知道怎么做,php,json,json-view,Php,Json,Json View,好吧,我一直在为这个发狂。我从PHP输出一个JSON,Chrome和Firefox的JSON视图扩展都声称它无效。这两个扩展都能正常工作,所以我的JSON似乎有问题,但我不知道是什么问题 Firefox版本有一条错误消息: There was an error parsing the JSON document. The document may not be well-formed. Chrome版本没有此类错误消息,但仍然以明文形式打印JSON 我正在设置标题,如下所示:header('C

好吧,我一直在为这个发狂。我从PHP输出一个JSON,Chrome和Firefox的JSON视图扩展都声称它无效。这两个扩展都能正常工作,所以我的JSON似乎有问题,但我不知道是什么问题

Firefox版本有一条错误消息:

There was an error parsing the JSON document. The document may not be well-formed.
Chrome版本没有此类错误消息,但仍然以明文形式打印JSON

我正在设置标题,如下所示:
header('Content-Type:application/json')我已经检查了Firebug和Chrome开发工具中的响应标题;这两种情况下都设置正确。删除隐藏Firefox版本中错误消息的内容,明文不是单空格字体,但仅此而已

完整的请求头:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:msgPublishID=1347362550,1345649049; logout_rem=1; sh_rand=625703e7f9f9e03efabaef56f52ff97d7f68bc67; username=kryan; password=f85720746a490ece4dd7a945f5c9ed8e25b15f1f; fullname=Kevin+Ryan; user_type=1
Host:localhost
Pragma:no-cache
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
完整的响应标题:

Connection:Keep-Alive
Content-Length:371
Content-Type:application/json
Date:Thu, 27 Sep 2012 19:12:52 GMT
Keep-Alive:timeout=5, max=99
Server:Apache/2.4.2 (Win32) OpenSSL/1.0.1c PHP/5.4.4
X-Powered-By:PHP/5.4.4
我已经经历了JSON本身的许多变化,但我无法想象当像这样简单的事情发生时,JSON会出现问题:

{"session":"expired"}
他仍然在失败。我反复检查;这实际上就是服务器响应的全部内容,但JSON视图仍然会抱怨。对于更复杂的JSON,我一直使用

echo json_encode($output, JSON_PRETTY_PRINT);
其中,
$output
是关联数组;输出看起来完全正确,但JSON视图仍在抱怨。这是文件中唯一未注释掉的
echo

那么这里到底出了什么问题?我真的需要JSON视图;我经常使用非常大的JSON,而折叠和扩展对象和数组的能力对于调试我的应用程序至关重要。看起来不错,但是如果每次测试这些PHP文件时都要复制并粘贴它们的输出,那么我的工作效率就会受到影响

编辑:我发现如果我这样做的话,效果会更好:

<?php
    header('Content-Type: application/json');
    die('{"debug":true}');
    // remainder of the program as-is, starting with...
    require('dbinfo.php');
Argh

我想出来了:BOM把事情搞砸了,但当然它也是完全看不见的。检查编码并将其更改为UTF-8而不使用BOM完全解决了这个问题


我不知道这个BOM是PHP设计还是Unicode设计的问题,但它确实令人讨厌。

您能提供请求和响应来回发送的附加HTTP头吗?您的错误日志中有错误吗?您是否已检查firebug或其他内容以查看发送到浏览器的标题?我能想到的唯一一件事是,如果无意中已经发送了某些内容,那么无法修改标题。您在客户端使用什么来解析json字符串?@KRyan:两者都有Windows二进制文件:。如果不清楚,这些是命令行工具,您将在
cmd.exe
中运行它们。
<?php
    header('Content-Type: application/json');
    require('dbinfo.php'); // note this comes before the die statement
    die('{"debug":true}');
    // remainder of the program as-is