首页 > 解决方案 > 返回 json enconde 关联数组只有一项

问题描述

我有一个$variable = array(...);

我需要像这样打印一个 JSON 响应

{
  info: {
    "foo": true,
    "bar": "lion"
  },
  data: [
    {"id": 123,
     "name": "foo",
     "baz": {  "some":1,
               "data":true
             }
    },
    {"id": 321,
     "name": "bar",
     "baz": {}
    }
  ]
}

所以,问题在于response["data"][1]["baz"]

有时,这个变量可以是一个空数组{},但是当我使用json_encode它作为无关联数组返回时[]

我需要这个变量作为关联数组

但是如果在 PHP 中我们把

echo json_encode($variable,JSON_FORCE_OBJECT);

退货

{
  info: {
    "foo": true,
    "bar": "lion"
  },
  data: {
    0: {"id": 123,
        "name": "foo",
        "baz": {  "some":1,
                  "data":true
                }
    },
    1: {"id": 321,
        "name": "bar",
        "baz": {}
       }
  ]
}

并且response["data"] 必须是无关联数组

因此,


response["data"]必须是一个列表,因为它是由 javascript 中的外部库读取的

标签: phparraysjsonassociative-array

解决方案


如果您将所讨论的属性设置为一个ArrayObject而不是内置数组,则无论它是否为空,它将被序列化为一个对象。

# Converting the existing array, which may be empty, to an ArrayObject
$baz = new ArrayObject($baz);

# Or create a new ArrayObject
$baz = new ArrayObject();
$baz['a'] = 'b';

或者,您可以在数组为空的情况下使用stdClass类。这将被序列化为一个空对象 ( {})。

if (empty($baz)) {
    $baz = new stdClass();
}

推荐阅读