栏目:PHP
1257
唐小碎发布于:2021-11-27 14:07:28
标签:
PHP
在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":{}}
````
至此,本篇分享已结束,如果本文能帮助到你,请点一个赞吧。
评论
唐小碎的老婆 2021-11-30 16:21:58
继续努力啊!