字符串{"foo":"\\"}
是有效的json,但似乎php无法json对其进行解码。
在php中运行以下内容:
php > $a = '{"foo":"\\"}';
php > var_dump(json_decode($a));
php shell code:1:
NULL
php > var_dump(json_last_error_msg());
php shell code:1:
string(53) "Control character error, possibly incorrectly encoded"
这是怎么回事?
答案 0 :(得分:4)
{"foo":"\\"}
确实是有效的JSON,但是在php中,要拥有此字符串,您需要先转义\
。
$a = '{"foo":"\\\\"}';
var_dump($a);
echo "-------" . PHP_EOL;
var_dump(json_decode($a));
输出
string(12) "{"foo":"\\"}"
-------
object(stdClass)#1 (1) {
["foo"]=>
string(1) "\"
}
答案 1 :(得分:2)
您需要对反斜杠进行转义,因为PHP字符串解析器正在将其作为转义进行处理。
$a = '{"foo":"\\\\"}';
但是正确的解决方案是使用json_encode()
:
$a = json_encode(["foo": '\\']);
请注意,我必须在该文字中使用反斜杠。