您的位置 首页 php

3分钟短文 | Laravel 返回空对象的 Json 数据

引言

我们常说PHP就是 数组 一把梭,因为数组在程序内所占的比重和地位实在太重要。 今天我们就来说一说在API接口编程中经常会遇到的,特别是对接强类型的语言时, 如何保证接口数据结构和类型的稳定性。

学习时间

PHP的数组有关联数组,和序列化数组之分。在很多场景下,返回的数组经过二次操作, 结构都有可能发生较大的改变。这时候能不能保证返回数据的稳定,很考验PHPer们的基础水平。

比如一个接口正常返回的,是一个关联数组,都有明确指定的键值对,这个时候基本不会出错。 但如果在程序上下文中,需要返回错误信息,假如我们指定下面的格式:

 $data = array('code' => 30009, ' msg ' => 'invalid paramater');  

很显然这是一个关联数组,在laravel程序中,手动构建一个 Json 字符串的输出:

 return response()->json($data);  

那么经过请求后返回的数据是下面这样的json格式的字符串:

 {"code":30009,"msg":"invalid paramater"}  

假设我们正常返回了数据,且数据是关联数组,类似下面这种方式:

 $list = array(
    'name' => 'joe',
    'age' => 21,
);  

然后我们组装起来为接口准备数据:

 $data = array(
    'code' => 0,
    'msg' => 'ok',
    'list' => $list,
);  

大家请注意,我们已经使用了嵌套数组,$data[‘list’] 就是。接着仍然构造响应体:

 return response()->json($data);  

请求接口后返回的数据格式如下:

 {"code":0,"msg":"ok","list":{"name":"joe","age":21}}  

那么我们现在要把上面的格式固定下来,$data[‘list’] 始终需要返回一个关联的数组,或者说是一个 json 格式中的 对象。 也就是当 $list 没有值的时候,我们仍然保持上面的格式,应该怎么办呢?

其实,只需要一个空对象就可以了。在PHP中构造一个空对象,有一个简单的做法,就是

 new \stdClass();  

创建一个这样的对象,没有属性,没有方法,没有任何数据。但是怎么把空对象,转换为JSON格式的字符串呢? 我们应该使用下面的方式:

 $list = json_encode(new \stdClass);  

然后返回其他数据不变,请求后的返回数据如下:

 {"code":0,"msg":"ok","list":"{}"}  

PHP动态语言很好地提供了灵活的语言数据类型,所以我们还有很多种方式可用。比如使用强制数据类型转换, 在手册中明确说明了,对于 null,使用 object 数据类型格式化后,会返回空对象。所以上面的赋值操作也可以这样写:

 $list = (object) null;  

当然结果是一样的。

如果你不厌烦曲线救国的方法,也可以像下面这样写。

 $list = json_encode(json_decode("{}"));  

对于json中的空对象 {} ,可以先解码后 编码 ,结果是一样的。

写在最后

本文通过三种方式实现了laravel响应体中手动构建一个json空对象的方法。 大家可以根据实际情况,进行灵活选用。不过要稳妥,还是推荐使用第一种方法, 手动创建 stdClass 对象,然后使用 json_encode 编码。

Happy coding 🙂

文章来源:智云一二三科技

文章标题:3分钟短文 | Laravel 返回空对象的 Json 数据

文章地址:https://www.zhihuclub.com/76991.shtml

关于作者: 智云科技

热门文章

网站地图