如何通过解码JSON类中的反射访问数字属性


How do I access numeric properties via reflection in decoded JSON classes?

这是我在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处理在我的系统的其他部分。

最简单的方法是使用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});