2015-01-26 3 views
1

Я играю с API, который дает мне данные обратно в формате JSON, что я тогда json_decode() в следующем формате:Получение имени объекта StdClass в PHP

[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", а не имя. Как получить имя объекта?

+3

Почему бы не использовать второй аргумент в 'json_decode()', чтобы он возвращал массивы вместо объектов? – Barmar

+3

'2015-01-26T20: 45: 01Z' не является именем класса, это имя свойства. – Barmar

ответ

4

Это на самом деле не класс объекта: это имя свойства, которое содержит stdClass объект. Поэтому вам нужно получить имя свойства первого объекта от $bawsaq->stockData->data->PS3. На самом деле это немного сложно.

Лучше работать с массивами. Если вы используете параметр $assocjson_decode, вы можете получить ассоциативный массив вместо объекта всякий раз, когда появляется объект JSON. С PHP это гораздо проще справиться.

$bawsaq = json_decode($jsonData, true); 

Вы можете получить имя ключа с key:

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

Замечательный. Мне нравится иметь дело с объектами в обычном режиме, но ясно, что в такие моменты лучше всего массивы. Благодаря! –

+1

Обычно я тоже работаю в объектах, но почти никогда не с stdClass. Стекло, чтобы помочь. – lonesomeday

0

Вы можете использовать метод get_object_vars.

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

print_r(get_object_vars($obj)); 

Результат:

Array 
(
    [field1] => value1 
) 
4

Когда вы декодировать JSON, используйте

$bawsaq = json_decode($json, true); 

Это вернет ассоциативные массивы вместо stdClass объектов для всех объектов JSON. Затем вы можете использовать

$keys = array_keys($bawsaq['stockData']['data']; 
$date = $keys[0]; 
0

Вы можете использовать второй аргумент json_decode. Это будет возвращать данные в виде ассоциативного массива вместо списка объектов, так что вы могли бы просто использовать

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

или Еогеасп петлю. См. Также key на php.net.

+0

Это не будет работать, это будет выглядеть так: '$ input ['stockData'] ['data'] ['PS3'] ['2015-01-26T20: 45: 01Z']' – prodigitalson

+0

отредактировал его;) Должны теперь работать + получать данные – Sebb