[PHP json_encode转换空数组为对象]

问题描述:

php在给端提供接口,比如PC和安卓,ios等,如果返回json格式的数据,当返回数据的为数组,且key为字符串时,json化后将返回jsonObject,但是如果是空数组,有可能返回的就是jsonArray,数据结构不一致导致端解析json失败。

如:

  1. $arr = [
  2. 'id' => 123.,
  3. 'name' => 'andrew',
  4. ];
  5. $jsonRet = json_encode($arr);
  6. print_r($jsonRet);

输出:

  1. {
  2. "id": 123,
  3. "name": "andrew"
  4. }

但是如果是:

  1. $arr = \[\]; $jsonRet = json_encode($arr); print_r($jsonRet);

输出:

  1. []

如何在数组为空时也是JsonObject呢?

方法一:

使用JSON_FORCE_OBJECT

  1. $arr = []; $jsonRet = json_encode($arr, JSON_FORCE_OBJECT); print_r($jsonRet);

此法有一弊端,eg:

  1. $arr = \[
  2. 'jsonArray' => [
  3. '21', '12', '13'
  4. ],
  5. 'jsonObject' => []
  6. ];
  7. $jsonRet = json\_encode($arr,JSON\_FORCE_OBJECT);
  8. print_r($jsonRet);

输出:

  1. {
  2. "jsonArray": {
  3. "0": "21",
  4. "1": "12",
  5. "2": "13"
  6. },
  7. "jsonObject": {
  8. }
  9. }

原本jsonArray的也被jsonObject化了,局部的改变不能影响全局

方法二(推荐)

使用 ArrayObject

  1. $arr = [
  2. 'jsonArray' => [
  3. '21', '12', '13'
  4. ],
  5. 'jsonObject' => new \\ArrayObject()
  6. ];
  7. $jsonRet = json_encode($arr);
  8. print_r($jsonRet);

输出:

  1. {
  2. "jsonArray": [ "21", "12", "13" ],
  3. "jsonObject": { }
  4. }

注:PHP版本为7.2

分类: web

标签:   php