PHP json_encode返回空对象

在php中,我们可以方便的使用json_encode()返回一个json字符串。但是,因为json中的对象是一个键值对:如`{"title":"coding","type":"work"}` ,而json中的数组是:`['a','b','c']` ,对象和数组的格式是不同的。而在php中,上述的对象和数组都是以数组存在的,其中对象是关联数组。所以,当我们返回一个php空数组的时候,把这个空数组json_encode的时候,得到的是一个`[]`,那我们如何返回一个空对象`{}` 呢? ## 方法一,使用 JSON_FORCE_OBJECT 参数 在使用json_encode()时,传入参数JSON_FORCE_OBJECT ````php $data = [ 'name' => 'Mike', 'age' => 24, 'hobby' => [], 'skill' => [] ]; echo json_encode($data); // {"name":"Mike","age":24,"hobby":[],"skill":[]} echo '</br>'; echo json_encode($data,JSON_FORCE_OBJECT); // {"name":"Mike","age":24,"hobby":{},"skill":{}} ```` ## 方法二,使用new stdClass() 上述的方法一有一个问题,就是它会把所有的php数组转化为对象,无论是普通数组还是关联数组。那我们平常开发中,肯定是需要一些字段返回json数组,一些字段返回json对象的。那此时,可以使用 new stdClass()来处理。 例如如下多维数组,我们希望hobby字段返回数组,为空时,返回`[]`,而skill字段返回对象,为空时,返回`{}`。 ##### 1,数据不为空时,php程序自动判断返回类型 ````php $data = [ 'name' => 'Mike', 'age' => 24, 'hobby' => ['play game','football','swimming'], 'skill' => [ 'title'=>'coding', 'type'=>'work', ] ]; echo json_encode($data); 返回json字符串: {"name":"Mike","age":24,"hobby":["play game","football","swimming"],"skill":{"title":"coding","type":"work"}} ```` ##### 2,数据为空时,php无法自动判断返回类型,默认都返回 `[]` ````php $data = [ 'name' => 'Mike', 'age' => 24, 'hobby' => [], 'skill' => [] ]; echo json_encode($data); // {"name":"Mike","age":24,"hobby":[],"skill":[]} ```` 此时,如果我们希望skill字段返回对象,可以使用new stdClass(): ````php $data = [ 'name' => 'Mike', 'age' => 24, 'hobby' => [], 'skill' => [] ]; if(count($data['skill']) == 0) $data['skill'] = new stdClass(); echo json_encode($data); // {"name":"Mike","age":24,"hobby":[],"skill":{}} ```` 至此,本篇分享已结束,如果本文能帮助到你,请点一个赞吧。

评论

  1. #1

    唐小碎的老婆 2021-11-30 16:21:58
    继续努力啊!