为何后端经常会将一个空数组返回为 null ?

后端写的 api ,返回如下的 json 数据

{"status":0,"data":{"applies":null,"total":"0"},"message":""}

其中 applies 字段返回的类型应该是数组。

但是记录数为0的情况下,为何会返回 null 而不是 []

后者不是更符合规范吗?

还是说后端有不得已的苦衷?

阅读 15.8k
7 个回答

这个应该是后端代码不够严谨吧。比如后端可以加一个判断,如果 applies 是一个array,但是没有值,也需要用array,不能使用NULL 等。
测试代码:

$c;

$arr = array(
    'status' => 1, 
    'data' => array(
        'a' => 111,
        'b' => array(),
        'c' => $c,
        'd' => (empty($c) ? array() : $c)
    )
);

echo json_encode($arr);

输出为:

{
status: 1,
data: {
a: 111,
b: [ ],
c: null,
d: [ ]
}
}

更符合规范……但并不一定是被遵守的。如果你不能控制后端,那你就将取到的数据简单的处理下吧:

javascriptvar result = {"status":0,"data":{"applies":null,"total":"0"},"message":""}
result.data.applies = result.data.applies || []

自己保证自己代码的健壮性好吧?
每个人都认为前面的人传来的一定是[],那任何一个环节出一点问题,返回null,整体都会挂。
每个人拿数据自己||一个[],那任何一个环节出问题,都不会挂。

因为不知道后端遭受了什么样的对待,让我们加上一些log,仔细倾听它的苦衷~

applies = return array
如果数组为空的话,那么applies就是null
规则是人定的,也可以这么约定
if(empty(array))
return "empty"

applies是从数据库联查出来的吧?你判断一下就可以了

哎,我也经常遇到这样的后端,这时候只能去沟通下,看看他们能不能做下处理,任何时候都不要出现null,这时候是空数组,某一些值的时候可以是空字符串,哪怕没有哪个key我都能接受,最害怕null,,,

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