php json_encode()函数返回对象和数组问题,app使用接口时

发布于 2020-12-22  34 次阅读


php json_encode() 函数格式化数据时会根据不同的数组类型格式化不同类型的json数据索引数组时

<?php
$arr = [1,2,3,4,5];
print_r(json_encode($arr));
//输出 [1,2,3,4,5]

关联数组时

<?php
$arr = [
    "name"=>"Bob",
    "job"=>"IT"
];
print_r(json_encode($arr));
//输出  {"name":"Bob","job":"IT"}

空数组

<?php
$arr = [];
print_r(json_encode($arr));
//输出 []

索引数组时生成的是数组类型数据,关联数组时生成的是对象类型的数据,空数组返回的是数组类型。但是当碰到同一个字段返回的数组可能是关联数组也可能是空数组时,就会在app端出现数据类型不一致的问题,解决方式有两种:

一,使用 json_encode的 JSON_FORCE_OBJECT 模式

<?php
$arr = [];
print_r(json_encode($arr,JSON_FORCE_OBJECT));
//输出 {}

但是这种存在一个问题,它会把所有的数据都以对象的方式返回,包括索引数组:

<?php
$arr = [1,2,3,4,5,6];
print_r(json_encode($arr,JSON_FORCE_OBJECT));
//输出  {"0":1,"1":2,"2":3,"3":4,"4":5,"5":6}

二,定义空数据时使用 ArrayObject 定义而不适用 Array() 或者 []

<?php
$arr = new ArrayObject();
print_r(json_encode($arr));
//输出 {}

到这里我们可以随意的控制返回的json数据中数据的类型啦!!!!


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。