json_encode()与json_decode()特殊情况汇总

json_encode()与json_decode()是php处理json数据用的,针对一些特殊情况,他的表现可能会出乎意料,总结如下:

json_encode()

1
2
3
4
5
6
7
8
9
10
11
12
13
// encode字符串
$str = 'aaa';
var_dump(json_encode($str));
// string(5) ""aaa""
// 注意这里会给字符串两侧加上双引号

$bol = true;
var_dump(json_encode($bol));
// string(4) "true"

$nul = null;
var_dump(json_encode($nul));
// string(4) "null"

json_decode()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$str = "aaa";
var_dump(json_decode($str));
// NULL

$str = '"aaa"';
var_dump(json_decode($str));
// string(3) "aaa"

$str = "\"aaa\"";
var_dump(json_decode($str));
// string(3) "aaa"

$str = "'aaa'";
var_dump(json_decode($str));
// NULL

$bol = 'true';
var_dump(json_decode($bol));
// bool(true)

$bol = 'null';
var_dump(json_decode($bol));
// NULL

其实上面有一部分json_decode()的使用方法会得到Syntax error错误的, 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$bol = 'aaa';
var_dump(json_decode($bol));

$str = "'aaa'";
var_dump(json_decode($str));

$bol = '';
var_dump(json_decode($bol));

// 尤其注意这里,如果想得到bool类型和null类型,必须用小写
$bol = 'True';
var_dump(json_decode($bol));

$bol = 'Null';
var_dump(json_decode($bol));
echo json_last_error_msg(),PHP_EOL;

实验版本:PHP 7.2.4

(完)