php返回json数组元素,PHP返回JSON时数组转对象的坑

敲黑板!重点,要考!

PHP的数组在转JSON的时候,如果索引连续,则转成数组。如果索引不连续,则会转成对象!

背景:一次项目中,需要替换后台接口数据源。前端接口json数据返回需要的是数组。替换后在前端逻辑不变更的前提下数据获取出错。

其实呢,核心问题已经敲黑板划重点了。如果看完重点就恍然大悟呢,就没接下去看的需要了。如果还不明所以,且听我继续唠嗑。没人看的话我就当记录一次自己工作中踩的坑吧。

f3c64d5e10ae?from=singlemessage

由于要重新获取后台的数据源,又要返回和之前接口规范一致的数据格式。在初次尝试中,改写完后台代码之后,前端的数据在某些指定为数组格式的数据源中,某个数据结构如下:

for(let i = 0 , len = this.list.length ; i < len ; i ++){

//业务逻辑

}

可见在循环体内执行的业务逻辑,当返回的数据变成了对象,是拿不到length的,打印出来

console.log(this.list.length); // undefinded;

那当然循环体内的所有业务逻辑也就自然不执行了。

当然,期初并没有意识到是PHP返回的数据格式悄悄的从原来规定的数组变成了对象了。

f3c64d5e10ae?from=singlemessage

一通排查之后,没错,就是瞎鸡儿胡乱给我找了对象!!

那么问题来了:什么地方导致PHP给我胡乱整了个对象?

后台的数据输出格式是基本不变的。唯一区别的地方,新数据对源数据的输出,添加了一个排序控制。

在后台的循环中,根据数据权重进行了对数据重排。

本来的数据输出索引是 0,1,2.重排之后变成了1,2,0. 同样的数据,就是这个小坑,也就是前面那句重点

PHP的数组在转JSON的时候,如果索引连续,则转成数组。如果索引不连续,则会转成对象!

解决办法。在数据输出之前,用php的数组排序重新排序一次就可以了。

我用了的 ksort(),当然其他诸如 array_values() 也是可以的。只要让数组索引连续就行了。

至此,这个坑就告一段落,如有不才写错,欢迎指出,也欢迎留言就交流~谢过。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值