2013-03-12 44 views
-2

我有一个对象数组。如何json_decode对象数组?

$arr = array(0 => o1, 1 => o2); 

我为此得到了正确的json_encode。我说,我有:

$json_data = json_encode($arr); 

但是,当我json_decode$json_data变量, 与第二个参数真我得到阵列格式的一切:

array(0 => array, 1 =>array) 

有第二个参数错误,我得到的对象格式的一切:

object(0 => object, 1 => object) 

如何获取原始数组?即如何获得

array(0 => object, 1 => object) 

编辑:解释我的问题。当我们对对象数组进行json_encode时,如何在json_decode编码数据时取回相同的对象数组?

回答

1

我尝试下面的PHP 5.6.11-1ubuntu3.1(CLI)的代码,并且出人意料地得到了正是我想要的。由于这个问题太旧了,我不记得在发布这个代码的时候我尝试了这个PHP版本是什么。

代码:

<?php 
class Test { 
     public $message = "this is message"; 
     public $number = 10; 
} 
$t1 = new Test(); 
$t2 = new Test(); 
$arr = array(0 => $t1, 1 => $t2); 
$json_data = json_encode($arr); 
var_dump($json_data); 
$original_array = json_decode($json_data, true); 
$original_object = json_decode($json_data, false); 
var_dump($original_array); 
var_dump($original_object); 
?> 

我得到的输出是:

string(85) "[{"message":"this is message","number":10},{"message":"this is message","number":10}]" 
array(2) { 
    [0]=> 
    array(2) { 
    ["message"]=> 
    string(15) "this is message" 
    ["number"]=> 
    int(10) 
    } 
    [1]=> 
    array(2) { 
    ["message"]=> 
    string(15) "this is message" 
    ["number"]=> 
    int(10) 
    } 
} 
array(2) { 
    [0]=> 
    object(stdClass)#3 (2) { 
    ["message"]=> 
    string(15) "this is message" 
    ["number"]=> 
    int(10) 
    } 
    [1]=> 
    object(stdClass)#4 (2) { 
    ["message"]=> 
    string(15) "this is message" 
    ["number"]=> 
    int(10) 
    } 
} 
0

试试这个:

$arr  = array(0 => "o1", 1 => "o2"); 

$json_data = json_encode($arr); 

$res  = json_decode($json_data, true); 

echo "<pre>"; 
print_r($res); 

输出:

Array 
(
    [0] => o1 
    [1] => o2 
) 
+0

这是数组的数组。我想要的是对象数组。 – 2013-03-12 07:47:02

+0

如果输入数组包含对象,你会得到它作为对象 – 2013-03-12 07:48:51

+0

当我打电话json_decode只有一个参数(json_encoded数据)我得到的是: 阵列 ( [0] =>阵列 [1] =>阵列 ) – 2013-03-12 07:56:30