我的JSON有问题.它在PHP 5.3中正确返回(所以我不能使用json_last_error()),当我将字符串显式复制到json_decode(json_decode('{...}')时它会成功返回.它只在我通过时返回null作为变量的结果,我使用的是PHP 5.2,这就是我需要的.
输出来自PHPUnit中的JSON日志记录:
[
{
"event": "suiteStart",
"suite": "",
"tests": 2
},
{
"event": "suiteStart",
"suite": "TagTestCase",
"tests": 2
},
{
"event": "test",
"suite": "TagTestCase",
"test": "TagTestCase::test_it",
"status": "fail",
"time": 0.00248718261719,
"trace": [
{
"file": "\/UnitTest\/PHPUnit.php",
"line": 98,
"function": "run",
"class": "PHPUnit_Framework_TestSuite",
"type": "->",
"args": [
{
}
]
},
{
"file": "\/UnitTest\/PHPUnit.php",
"line": 116,
"function": "run",
"class": "PHPUnit",
"type": "->",
"args": [
]
},
{
"file": "\/UnitTest\/PHPUnit.php",
"line": 212,
"function": "__tostring",
"class": "PHPUnit",
"type": "->",
"args": [
]
}
],
"message": "false assertionzzzzz.\nFailed asserting that <boolean:false> is true."
},
{
"event": "test",
"suite": "TagTestCase",
"test": "TagTestCase::test_two",
"status": "pass",
"time": 0.00182914733887,
"trace": [
],
"message": ""
}
]
Run Code Online (Sandbox Code Playgroud)
编辑:这些是路径,我一直在探索 - 也许你是一个更好的探险家..三个可能的道路可以帮助:
任何帮助将不胜感激.
谢谢!马特
Mat*_*att 20
多么糟糕的调试会议......好消息......我想通了......
我开始使用AJAX查看它并使用Firebug进行日志记录...事实证明json_decode(或顺便说一句eval)无法处理",这就是PHPUnit发送回来的(来吧塞巴斯蒂安!),所以要解决它:
$json = str_replace('"', '"', $json);
Run Code Online (Sandbox Code Playgroud)
现在我以为他们是一样的......也许有人可以开导我..
Mat*_*ija 17
昨天我花了2个小时检查并修复了这个错误,最后我发现在我想要解码的JSON字符串中是'\'斜杠.因此,合乎逻辑的做法是使用stripslashes函数或类似于不同PL的东西.
当然最好的方法是打印这个var并看看它在json_decode之后变成了什么,如果它是null你也可以使用json_last_error()函数来确定它将返回整数的错误但是这里描述的是int:
0 = JSON_ERROR_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8
在我的情况下,我输出的json_last_error()为4号,因此它是JSON_ERROR_SYNTAX.然后我去看看我想要转换的字符串,它在最后一行:
'\'title\' error ...'
Run Code Online (Sandbox Code Playgroud)
在那之后真的只是一个简单的解决方案.
$json = json_decode(stripslashes($response));
if (json_last_error() == 0) { // you've got an object in $json}
Run Code Online (Sandbox Code Playgroud)