这是我在PHP中从JSON解码的对象:
php > var_dump($v);
object(stdClass)#9 (1) {
["objects"]=>
object(stdClass)#10 (2) {
["16"]=>
object(stdClass)#14 (2) {
["id"]=>
int(16)
["name"]=>
string(8) "Object 1"
}
["32"]=>
object(stdClass)#11 (2) {
["id"]=>
int(20)
["name"]=>
string(8) "Object 2"
}
}
}
php > $rc = new \ReflectionClass($v);
php > var_dump($rc);
object(ReflectionClass)#17 (1) {
["name"]=>
string(8) "stdClass"
}
php > var_dump($rc->getProperties());
array(0) {
}
如您所见,ReflectionClass无法检测到任何属性。我不能$v->objects->32
,因为PHP不允许数字属性。我也无法解码为关联数组,因为这会破坏我系统其他部分的JSON处理。
答案 0 :(得分:1)
最简单的方法是使用json_decode的第二个参数并将其设置为true。使用此方法,您可以像访问任何其他关联数组一样访问变量
$v = json_decode($data, true);
$value = $v['objects']['32']
如果你不能改变json_decode调用,你可以使用以下语法来访问var
$v = json_decode('{"objects":{"16":{"id":16,"name":"Object 1"},"32":{"id":20,"name":"Object 2"}}}');
var_dump($v->objects->{'16'});
甚至
$name = '16';
var_dump($v->objects->{$name});