我有{
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中的外部库读取的
答案 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();
}