PHP JSON获取对象的名称

时间:2013-01-23 15:59:54

标签: php json object

<?
stdClass Object
(
    [image_header] => Array
        (
            [0] => stdClass Object
                (
                    [img] => /headers/header.jpg
                )
        )
)
?>

对象名称image_header是可变的,因此它可以是任何字符串。我可以在不知道它的情况下访问此字符串吗?

@Jon他的回答让我感到满意。

对于想要以这种方式使用变量对象名的其他人: 要使用variablename访问此对象,我必须使用大括号:

$key = key(get_object_vars($_json));
$_json->{$key}[0]->img;

3 个答案:

答案 0 :(得分:7)

您可以使用get_object_vars方便地执行此操作:

$propertyName = key(get_object_vars($object));

答案 1 :(得分:2)

如果您不知道该属性的名称,可以使用PHP Reflection classes,或者更简单地使用get_object_vars()

get_object_vars()可能就是你在这里寻找的东西 - 它&#34;返回范围内指定对象的已定义对象可访问非静态属性的关联数组。如果尚未为属性分配值,则将返回NULL值。&#34;因此,您将获得在关联数组中返回的属性名称及其值。

或者,您可以使用PHP的一些反射魔法,虽然这可能有点过分,取决于您的最终目标。反射类非常强大,如果您对要实现的目标有更复杂的要求,则可能值得使用。举个例子:

// let's say $obj is the object you provided in your question
// Instantiate the reflection object
$reflector = new ReflectionClass($obj); 

// Get properties of $obj, returned as an array of ReflectionProperty objects
$properties = $reflector->getProperties();
foreach ( $properties as $property ) {
  echo $property->getName(); // In your example, this would echo 'image_header'
}

答案 2 :(得分:0)

有几种可能性。如果您正在使用json_decode(),则可以将true作为第二个参数传递,以将数据解析为关联数组。

$data = json_decode($myJson, true);

print_r( $data['image_header'] );

您还可以从这样的变量访问对象属性。

$myProperty = 'image_header';

print_r( $data->$myProperty );

如果“你不知道它是什么”,你的意思是你根本不知道密钥,你可以使用我的第一个例子,并使用array_values()来获取索引值。

$values = array_values($data);

// image_header
print_r( $values[0] );