json_decode()返回null问题

Mat*_*att 11 php phpunit json

我的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)

编辑:这些是路径,我一直在探索 - 也许你是一个更好的探险家..三个可能的道路可以帮助:

  • 有什么不同的jsen_decode()在PHP 5.2然后5.3?他们改变了什么?
  • 其他人使用PHPUnit中的JSON,以及他们如何解析它.
  • 在变量中将其打印到屏幕并将其复制到json_decode()时会发生什么变化

任何帮助将不胜感激.

谢谢!马特

Mat*_*att 20

多么糟糕的调试会议......好消息......我想通了......

我开始使用AJAX查看它并使用Firebug进行日志记录...事实证明json_decode(或顺便说一句eval)无法处理&quot;,这就是PHPUnit发送回来的(来吧塞巴斯蒂安!),所以要解决它:

$json = str_replace('&quot;', '"', $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)