2014-02-07 2 views
0

как вы печатаете отдельные значения json-декодированного массива pls?распечатать отдельное значение из json-декодированного поля

$monrow = json_encode($monrow); 
$monrow= preg_replace("/_DOT_/", ".", $monrow); 
$monrow = json_decode($monrow,true); 

Я попытался следующие:

var_dump($monrow); //success, prints the whole array 
echo $monrow->name; //fails with: Notice: Trying to get property of non-object 
var_dump($monrow->name); //fails: same error message 
var_dump($monrow->properties); //fails: properties is of type object or hash 

Благодарности

+0

Как выглядит ваш массив после json-декодирования? –

+0

А как насчет 'var_dump ($ monrow ['properties']);'? –

ответ

2

json_encode() переведет некоторый объект или массив JSON. json_decode ($ var, true) переведет его в ARRAY. Чтобы снова использовать объект, используйте json_decode ($ var) без true.

+0

спасибо. Я хочу значение в массиве. и одно поле имеет тип объекта – Kingsley

1

Try, чтобы получить значение массива, а не свойство объекта:

var_dump($monrow); 
echo $monrow['name']; 
var_dump($monrow['name']); 

Вы можете проверить $monrow является массив или объект:

if (is_array($monrow)) { 
    echo $monrow['name']; 
} elseif (is_object($monrow)) { 
    echo $monrow->name; 
} else { 
    // do something else... 
} 

В вашем случае попробуйте использовать foreach:

foreach ($monrow as $row) { 
    if (is_array($row)) { 
     // do something with array 
     echo $row['name']; // for example 
    } elseif (is_object($row)) { 
     // do something with object 
     echo $row->name; // for example 
    } else { 
     // maybe do something else if you need... 
    } 
} 

Обычно после json_decode у вас есть массив o r экземпляр stdClass.

+0

Спасибо, Виктор. В моем случае одно из полей имеет объект типа (поэтому у меня есть строки и объекты или поля массива хэш). Как отобразить поля типа объекта? – Kingsley

+0

После декодирования JSON _everything_ в вашем объекте JSON вернется как массив. Вам придется индивидуально разбирать объекты обратно в свои контейнеры. – NobleUplift

+0

@Kingsley Check - это массив или объект '$ monrow', я обновил свой ответ. –

0

Я не знаю, где Виктор собирается с его ответом, но это, как вы должны обращаться с json_decode:

$decodeToArray = true; 
$monrow = json_encode($monrow); 
$monrow= preg_replace("/_DOT_/", ".", $monrow); 
$monrow = json_decode($monrow, $decodeToArray); 

$parsedArray = array(); 
foreach ($monrow as $key => $value) { 
    if ($decodeToArray) { 
     if (is_array($monrow[$key]) && $key == 'properties') { 
      $obj = new Object(); 
      foreach ($monrow[$key] as $property => $contents) { 
       $obj->$property = $contents; 
      } 
      $parsedArray[$key] = $obj; 
     } else { 
      $parsedArray[$key] = $value; 
     } 
    } else { 
     if (is_object($monrow->$key) && $key == 'properties') { 
      $obj = new Object(); 
      foreach ($monrow->$key as $property => $contents) { 
       $obj->$property = $contents; 
      } 
      $parsedArray[$key] = $obj; 
     } else { 
      $parsedArray[$key] = $value; 
     } 
    } 
} 

Кроме того, для Виктора, json_decode ($ JSon, правда) будет рекурсивно изменить весь JSON в массив, в возвращенном массиве не будет объектов:

print_r(json_decode('{"array":[1,2,3],"boolean":true,"null":null,"number":123,"object":{"a":"b","c":"d","e":"f"},"objectArray":[{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"}],"string":"Hello World"}', true)); 

Array 
(
    [array] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
     ) 

    [boolean] => 1 
    [null] => 
    [number] => 123 
    [object] => Array 
     (
      [a] => b 
      [c] => d 
      [e] => f 
     ) 

    [objectArray] => Array 
     (
      [0] => Array 
       (
        [a] => b 
        [c] => d 
        [e] => f 
       ) 

      [1] => Array 
       (
        [a] => b 
        [c] => d 
        [e] => f 
       ) 

      [2] => Array 
       (
        [a] => b 
        [c] => d 
        [e] => f 
       ) 

     ) 

    [string] => Hello World 
) 
+0

Это не работа. Вы никогда не входите в 'else', только если' $ array' пуст, couse, если вы имеете в виду, что '$ array' является массивом' json_decode', иначе почему вы делаете '$ array = true;'? –

+0

'$ array' был логическим ... Вы даже прочитали мой код? Я переименовал его в '$ decodeToArray', чтобы вы могли лучше понять мой код. – NobleUplift

+0

@ Кингсли Попробуйте это. – NobleUplift

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