首页
学习
活动
专区
工具
TVP
发布

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 :-)

我是@程序员小助手,持续分享编程知识,欢迎关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200820A03WOF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券