问题描述:
php在给端提供接口,比如PC和安卓,ios等,如果返回json格式的数据,当返回数据的为数组,且key为字符串时,json化后将返回jsonObject,但是如果是空数组,有可能返回的就是jsonArray,数据结构不一致导致端解析json失败。
如:
输出:
{"id": 123,"name": "andrew"}
但是如果是:
$arr = [];$jsonRet = json_encode($arr);print_r($jsonRet);
输出:
[]
如何在数组为空时也是JsonObject呢?
方法一:
使用JSON_FORCE_OBJECT
$arr = [];$jsonRet = json_encode($arr, JSON_FORCE_OBJECT);print_r($jsonRet);
此法有一弊端,eg:
$arr = ['jsonArray' => ['21', '12', '13'],'jsonObject' => []];$jsonRet = json_encode($arr,JSON_FORCE_OBJECT);print_r($jsonRet);
输出:
{"jsonArray": {"0": "21","1": "12","2": "13"},"jsonObject": {}}
原本jsonArray的也被jsonObject化了,局部的改变不能影响全局
方法二
使用数据类型转换
$bar=array();$foo=(object)$bar;echojson_encode($foo);
方法三(推荐)
使用 ArrayObject
$arr = ['jsonArray' => ['21', '12', '13'],'jsonObject' => new \ArrayObject()];$jsonRet = json_encode($arr);print_r($jsonRet);
输出:
{"jsonArray": ["21","12","13"],"jsonObject": {}}