2016-12-16 3 views
0

у меня есть JSON хранится в базе данных, которая выглядит следующим образомкак декодировать объект класса станд

[{"class":"button-input btn btn-warning","name":"gorilla-preview","value":"Goat","id":"gorilla-preview"}] 

Я восстанавливая это как этот

while($row = mysqli_fetch_assoc($res)){ 
      $array[] = json_decode($row['element']); 


     } 
    echo "<pre>"; 
    print_r($array); 

его Ouput выглядит как этот

Array 
(
    [0] => Array 
     (
      [0] => stdClass Object 
       (
        [class] => button-input btn btn-warning 
        [name] => gorilla-preview 
        [value] => Goat 
        [id] => gorilla-preview 
       ) 

     ) 

) 

Мой вопрос: Как получить все эти значения в правильном формате?

+0

Какой результат вы ожидаете? – Timurib

+0

simple 'key => value' pair array –

+1

Просто установите для' true' второй параметр 'json_encode()' – Timurib

ответ

1

Возможно, вам придется зацикливаться, потому что вы храните декодированные данные JSON в массиве. Таким образом, для извлечения уникальных значений, хранящихся в объекте JSON вам нужен второй цикл следующим образом:

ПРИМЕЧАНИЯ: от структуры ваших JSON данных, кажется, гораздо очевидно, что вам нужен вложенный цикл, хотя. ..

<?php 

     foreach($array as $index=>$arrData){ 
      foreach($arrData as $key=>$objData){ 
       // DO SOMETHING WITH THE INTERNAL VALUES OF THE JSON DATA. 
       var_dump($objData->class); 
       var_dump($objData->name); 
       var_dump($objData->value); 
       var_dump($objData->id); 
      } 
     } 

в качестве альтернативы, вы можете (, если вы так хотите) пропустить сохранение данных в массиве и использовать его непосредственно в первом цикле, как так:

<?php 

     while($row = mysqli_fetch_assoc($res)){ 
      $objData = json_decode($row['element'][0]); 
      // DO SOMETHING WITH THE DATA LIKE BUILD A DYNAMICALLY GENERATED HTML STRING. 
      echo "<p class='{$objData->class}' id='{$objData->id}'>{$objData->value}</p>; 
     } 

UPDATE:
Если, по вашему комментарию, у вас есть JSON данные, как: [{"class":"button-input btn btn-warning","name":"gorilla-preview","value":"Goat","id":"g‌​orilla-preview"}] фрагмент кода ниже (который вы можете Quick-Test Here) показывает, как вы можете получить доступ к данным:

 $json  = '[{"class":"button-input btn btn-warning","name":"gorilla-preview","value":"Goat","id":"g‌​orilla-preview"}]'; 
     $arrData = json_decode($json); 

     foreach($arrData as $key=>$objData){ 
      // DO SOMETHING WITH THE INTERNAL VALUES OF THE JSON DATA. 
      var_dump($objData->class);  //<==YIELDS:: string 'button-input btn btn-warning' (length=28) 
      var_dump($objData->name);  //<==YIELDS:: string 'gorilla-preview' (length=15) 
      var_dump($objData->value);  //<==YIELDS:: string 'Goat' (length=4) 
      var_dump($objData->id);   //<==YIELDS:: string 'g‌​orilla-preview' (length=21) 
     } 
+0

ваш ответ кажется правильным, но уровень вложенности - это то, что он должен определить прямо сейчас, я его реализовал, но он дает эту ошибку «пытается получить свойство не объекта». Можете ли вы мне помочь в этом отношении, спасибо –

+0

@DilipG Не могли бы вы проверить обновленный код? Не удивительно, хотя; вам также нужен вложенный цикл ...;-) – Poiz

+0

, пожалуйста, не чувствуйте себя плохо, насколько я знаю 'json_decode()' преобразует 'json' в' php array', поэтому этот мой код 'json_decode ($ row ['element']);' преобразует ' json' в 'array', поэтому почему я не могу использовать' -> 'like' $ objData-> class' –

1

Использование:

json_decode($row['element'], true); 

Когда вам нужно json_decode вернуть ассоциативные массивы вместо Ob jects просто передаются true как второй параметр.

Смежные вопросы