1. 程式人生 > >PHP json_encode轉換空陣列為物件

PHP json_encode轉換空陣列為物件

問題描述:

php在給端提供介面,比如PC和安卓,ios等,如果返回json格式的資料,當返回資料的為陣列,且key為字串時,json化後將返回jsonObject,但是如果是空陣列,有可能返回的就是jsonArray,資料結構不一致導致端解析json失敗。

如:

12345678$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",
    "13"
  ],
  "jsonObject": {
    
  }
}