json_decode返回null与不同的qoute

时间:2016-01-14 14:50:03

标签: php json

NULL,这有效,但返回json_decode("['foo','bar']", true)json_last_error()4输出JSON_ERROR_SYNTAXjson_decode(str_replace('"', '"', "['foo','bar']"), true)

我已经从以下问题中检查了一些答案;

json_decode() returns null issues

PHP json_decode() returns NULL with valid JSON?

json_decode returns NULL after webservice call

并尝试了以下解决方案,但没有成功;

json_decode(stripslashes(str_replace('\"', '"', "['foo','bar']")), true)

json_decode(stripslashes("['foo','bar']"), true)

json_decode(utf8_encode("['foo','bar']"), true)

"['foo','bar']"

我不认为它与UTF-8有关。这是一个PHP错误吗?或者,如何将'["foo","bar"]'转换为JSON作为解决方法?

2 个答案:

答案 0 :(得分:0)

您没有为函数提供有效的json。如果您使用javascript数组

    ["foo","bar"]
您应该使用JSON.stringify在js端实际生成JSON。

答案 1 :(得分:0)

JSON字符串引用双引号"。单引号'(在PHP中很常见)不是有效的JSON。没有讨论。因此,输入['foo','bar'] 无效json且json_decode正确拒绝解析

另见ECMA-404,它定义了JSON格式:

  

字符串是一系列用引号括起来的Unicode代码点(U + 0022)。 1

如果您正在寻找能够转换JSON-ish字符串的内容(它来自何处?将无效JSON的来源,最好是)修改为有效的JSON; str_replace('\'', '"', $jsonInput)应该在简单的情况下工作。

1 U+0022是双引号"