返回json enconde关联数组只有一个项目

时间:2018-04-30 01:34:27

标签: php arrays json associative-array

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

我需要像这样打印JSON响应

response["data"][1]["baz"]

所以,问题在于{}

有时,此变量可以通过空数组json_encode,但是当我使用[]时,将其返回为无关联数组echo json_encode($variable,JSON_FORCE_OBJECT);

  

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

但如果在PHP中我们放

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

返回此

response["data"]

baz 必须为无关联数组

因此,

  • {}作为关联数组data返回(即使为空,这里也是问题)。
  • 始终将[]作为无关联数组response["data"]返回。

from copy import deepcopy 必须是一个列表,因为它是由javascript中的外部库读取的

1 个答案:

答案 0 :(得分:2)

如果你使有问题的属性成为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();
}