【发布时间】:2018-10-01 07:35:18
【问题描述】:
$foo_json = '{"hoge":"ywwxEu|`tYdBeARGJ?nJ~BHHmDjX|PdEl@Rj@\\XVtKtK\\VbKnFrIbEzEbBnEbBfDfAxBz@LJjBl@jEzAfZzKDPY|DUdCGbAFL?|AD~AJ\\LNPJ~B|@p@Ll@FRDd@RvBnAfA`@dAl@^NhAVd@@p@?h@H`@Pv@l@TR^f@`Rd@xAFdEVnCLjJn@Cn@FlRDh@HRHHjKpG\\\\jC`G|EvJ|BjGf@vAJh@nGpC`FrBbG`D~@XdBRnNtAnTdBf@Jn@Zf@h@pB`DrD|EZl@jBfEf@`Af@r@tCpChFrG~@zAx@dBdB~Cz@xA`AxA|@l@f@VdDrAnAl@jI~CpCv@|@f@~An@jIxD~CdAzAl@rCvAjI|CzJpClJbCvLdDbn@lH`d@pF~Df@dDn@hA`@hBfA~AbAzQpMvHhFhQ~L~G`FtBrArCnBbBnAjB`A`~@~^tBx@n@RfB\\b@Fh@B|BBpV{AfSgArJq@~@?dBF`Cd@nFjAhXdG~@VtMpEd[fKfL|DxWrI~Y`KvLtDp\\zK|DnAzBbAbA|@rAtApAfBhA`Cl@fBh@lBtEpQh@fBrAjFdDpLdArCj@fAd@x@`BvBlDnDrVxWjDzD`GlGhCvBvBvA|DjBlC|@hTvEfBNvABvISxUo@|JSlA@tBLt@LdAXv@ZnB~@~@t@xAnAf@f@xEdEzAbBzAnBlWp_@bAnBlBpE|@tChBdFhBjGzCnJrCdHp@jAxAxBlGvH~@|Ab@bAp@xBnCdMd@pBl@fBt@bB\\j@v@lAxUlUtCjCdBz@nJdIdJbIrH`H~F|EjDxCzAnBNb@HdAJ|Fb@jDTpHq@@"}';
$foo = json_decode($foo_json);
我写了这段代码,但是 json_decode 返回 null,而 json_last_error() 返回“JSON_ERROR_SYNTAX”。 所以我知道有一些语法错误,但我尝试了JSONLint 的字符串,他们说 Valid JSON。
可能是因为字符串很复杂并且包含符号的原因。 我不明白出了什么问题。
PHP5.6.33
CentOS 6.6 版
答案就在这里。 问题是反斜杠,我不喜欢删除它。 json_decode returns JSON_ERROR_SYNTAX but online formatter says the JSON is OK 上面的文章说把它去掉就行了,这种情况下,我需要替换它。
$foo_json = str_replace('\\', '\\\\', $foo_json);
我添加了这段代码,然后它工作正常。
【问题讨论】:
-
“所以我知道有一些语法错误,但我在 JSONLint 尝试了字符串,他们说 Valid JSON”——当我尝试它时,它会抛出错误。
-
@Quentin 真的吗?我没有错误
-
@IslamElshobokshy — 真的。确保您尝试验证您的 JSON 而不是字符串文字的 PHP 源代码。
-
@Quentin 我做到了,老实说,我使用 JsonLint 没有出错