php作为弱类型语言json_encode的时候不是想要的时候

php在给安卓还有ios提供接口的时候,我们碰到这样的一个问题
例子:

php 关联数组

[
    'aa' => '111',
    'cc' => '222'
]

转json以后

{
    "aa":"111",
    "cc":"222"
}

但是如果某些情况下,php的关联数组为空,json_encode以后,json字符串就从{}变成了[],app客户端本身想要一个字典类型的数据结构,结果变成了数组,导致解析错误。

我想问下phper你们都是怎么处理这种问题的?我们目前的解决方法其实无非就是服务端php判断或者客户端判断,服务端判断比较现实一点,因为服务端知道本身应该是什么数据,如果数据为空的话可以new stdClass(),转json前把类型变成空对象,但是每次这种结构都要判断一下也是有点麻烦。
不知道有什么好的其他解决方案?

阅读 4k
5 个回答

尽量规范些。

$arr    =   array(
            'code'=>0,
            'msg'=>'获取成功',
            'data'=>array(  'aa' => '111','cc' => '222'),
        );
==========================================================        
{
 "code":0,
 "msg":"获取成功",
 "data":{
  "aa":"111",
  "cc":"222"
 }
}
==============================================================
{
 "code":0,
 "msg":"获取成功",
 "data":[
  
 ]
}

安卓和ios一般崩盘,一种是接口那边程序报错了,要不然就是解析json的时候用错类型,比方本来是解析字符串了,后面变成了数字型,然后就是你上面这种情况,一会有数据,一会没数据,没数据的时候照样当成有数据来解析,肯定报错。

我之前就问过我的同事,像安卓和ios像这种基础的数据判断完全是可以自己处理的,不过你接口要尽量规范就是了。

json_encode,使用JSON_FORCE_OBJECT这个参数,就可以

楼主你要先搞懂什么叫作弱类型语言 再去理解下什么叫作对象和数组 补补基础好嘛

要看你的数组有无下标的。

[
    'aa' => '111',
    'cc' => '222'
]

像这种的就是有下标的,转换之后就是对象
如果是这种的

[
    '111',
    '222'
]

转换后就是数组

var_dump(json_encode([]));
var_dump(json_encode([], JSON_FORCE_OBJECT));

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题