PHPjson_encode转换空数组为对象
问题描述:
php在给端提供接⼝,⽐如PC和安卓,ios等,如果返回json格式的数据,当返回数据的为数组,且key为字符串时,json化后将返回jsonObject,但是如果是空数组,有可能返回的就是jsonArray,数据结构不⼀致导致端解析json失败。
如:
1 2 3 4 5 6 7 8$arr= [
'id'=> 123.,
'name'=> 'andrew',
];
$jsonRet= json_encode($arr); print_r($jsonRet);
输出:
{
"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化了,局部的改变不能影响全局
⽅法⼆
使⽤数据类型转换
1. $bar = array();
2. $foo = (object)$bar;
3. echo json_encode($foo);
⽅法三(推荐)
使⽤ ArrayObject
$arr = [
'jsonArray' => [
'21', '12', '13'
],
'jsonObject' => new \ArrayObject()
];
$jsonRet = json_encode($arr);
print_r($jsonRet);
输出:
{
"jsonArray": [
"21",
"12",
phpjson格式化输出
"13"
],
"jsonObject": {
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论