PHP输出JSON数据是非常方便的。一般情况下,PHP的一维数组输出为JSON时,会转成一个对象,也就是下面的形式:
<?php
$array = [
'name' => 'crazymus',
'age' => 18
];
echo json_encode($array);
?>
// output
{
"name": "crazymus",
"age": 18
}
但是当数组为空时,输出的JSON中该数组却没有变成一个对象,而是一个数组:
<?php
$array = [];
echo json_encode($array);
?>
// output
[]
有一次和Java的开发同学对接的时候,就遇到这个问题了。Java同学问:为什么你的接口返回的数据结构不一致,数据不为空时是对象,为空时是数组?
研究了一下,发现解决方案也很简单,那就是在输出JSON之前,如果数据为空数组,就把它先转成一个PHP对象。
<?php
$object = new stdClass();
echo json_encode($object);
?>
// output
{}
stdClass是个什么东西呢?查询手册发现它是PHP的一个基类,所有PHP类都会继承这个类,我们可以直接用它来创建一个空对象。
这样,在输出JSON的时候,PHP知道这是一个对象,就不会把他转换为JSON中的数组了。