Получение результата массива из json_decode

Как получить массив в результате из json_decode() ?

У меня был массив вроде этого:

 $array = array( 'mod_status' => 'yes', 'mod_newsnum' => 5 ); 

и я сохранил это в базе данных, как JSON encode:

 {"mod_status":"yes","mod_newsnum":5} 

Теперь я хочу получить массив снова из базы данных. Но когда я использую:

 $decode = json_decode($dbresult); 

Я получил:

 stdClass Object ( [mod_status] => yes [mod_newsnum] => 5 ) 

Вместо массива. Как я могу получить массив вместо объекта?

Установите второй параметр json_decode в true, чтобы заставить ассоциативные массивы:

 $decode = json_decode($dbresult, true); 

Согласно http://in3.php.net/json_decode :

 $decode = json_decode($dbresult, TRUE); 
 $decode = json_decode($dbresult, true); 

Или

 $decode = (array)json_decode($dbresult); 

Если вы используете эти данные только на PHP, я рекомендую использовать serialize и unserialize вместо этого, иначе вы никогда не сможете различать объекты и ассоциативные массивы, поскольку информация о классе объектов теряется при кодировании JSON.

 <?php class myClass{// this information will be lost when JSON encoding // public function myMethod(){ echo 'Hello there!'; } } $x = array('a'=>1, 'b'=>2); $y = new myClass; $y->a = 1; $y->b = 2; echo json_encode($x), "\n", json_encode($y); // identical echo "\n", serialize($x), "\n", serialize($y); // not identical ?> 

Запустить его.

json_decode результата объекта json_decode в массив может иметь неожиданные результаты (и вызвать головные боли). Из-за этого рекомендуется использовать json_decode($json, true) вместо (array)json_decode($json) . Вот пример:

Разбитая:

 <?php $json = '{"14":"29","15":"30"}'; $data = json_decode($json); $data = (array)$data; // Array ( [14] => 29 [15] => 30 ) print_r($data); // Array ( [0] => 14 [1] => 15 ) print_r(array_keys($data)); // all of these fail echo $data["14"]; echo $data[14]; echo $data['14']; // this also fails foreach(array_keys($data) as $key) { echo $data[$key]; } 

За работой:

 <?php $json = '{"14":"29","15":"30"}'; $data = json_decode($json, true); // Array ( [14] => 29 [15] => 30 ) print_r($data); // Array ( [0] => 14 [1] => 15 ) print_r(array_keys($data)); // all of these work echo $data["14"]; echo $data[14]; echo $data['14']; // this also works foreach(array_keys($data) as $key) { echo $data[$key]; }