在 PHP 中获取 stdClass 对象的名称


Getting the name of a stdClass object in PHP

我正在使用一个 API,它以 JSON 格式为我提供数据,然后我将其json_decode()为以下格式:

[stockData] => stdClass Object
    (
        [data] => stdClass Object
            (
                [PS3] => stdClass Object
                    (
                        [2015-01-26T20:45:01Z] => stdClass Object
                            (
                                [AMU] => 999.76
                                [ZIT] => 3.63
                            )
                    )
            )
        [status] => stdClass Object
            (
                [code] => 200
                [text] => ok
            )
    )

我需要某种方法来获取2015-01-26T20:45:01Z(一直在变化)。

我已经尝试get_Class()对象,例如:

get_Class($bawsaq->stockData->data->PS3)(实际上在foreach循环中)

但返回的只是:"stdClass"而不是名称。如何获取对象的名称?

它实际上不是对象的类:它是包含stdClass对象的属性的名称。因此,您需要从$bawsaq->stockData->data->PS3获取第一个对象属性名称。实际上,这有点棘手。

使用数组更好。如果使用 json_decode$assoc 参数,则可以在出现 JSON 对象时获取关联数组而不是对象。这在 PHP 中更容易处理。

$bawsaq = json_decode($jsonData, true);

您可以使用 key 获取密钥名称:

$dateTime = key($bawsaq['stockData']['data']['PS3']);

解码 JSON 时,请使用

$bawsaq = json_decode($json, true);

这将返回关联数组,而不是所有 JSON 对象的stdClass对象。然后你可以使用

$keys = array_keys($bawsaq['stockData']['data'];
$date = $keys[0];
您可以使用

get_object_vars方法。

$obj = new stdClass();
$obj->field1 = 'value1';
print_r(get_object_vars($obj));

结果:

Array
(
    [field1] => value1
)

您可以使用第二个参数来json_decode 。这会将数据作为关联数组而不是对象列表返回,因此您可以简单地使用

$input = json_decode($jsonInput, true);
$key = key($input['stockData']['data']['PS3']);
$data = $input['stockData']['data']['PS3'][$key];

或一个 foreach 循环。另请参阅 php.net key