2011-03-02 148 views
287

我想解码一个JSON字符串到一个数组,但我得到以下错误。json_decode数组

Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\temp\asklaila.php on line 6

下面是代码:

<?php 
$json_string = 'http://www.domain.com/jsondata.json'; 

$jsondata = file_get_contents($json_string); 
$obj = json_decode($jsondata); 
print_r($obj['Result']); 
?> 

回答

576

按照the documentation,你需要指定,如果你想要一个关联数组,而不是从json_decode对象,这将是代码:

json_decode($jsondata, true); 
+1

这引出了一个问题,什么是有它返回一个数组而不是对象的优势是什么? – Foxinni 2012-08-16 13:31:48

+23

它引发了这个问题。 “乞求一个问题”意味着假设一些有待证明的东西([ref](http:// en。wikipedia.org/wiki/Begging_the_question))。无论哪种情况,优点都可能在于OP比对象更舒适地遍历数组,或者其他一些已经实现的代码需要数组。 – jamesnotjim 2013-03-06 15:31:40

+3

@jamesnotjim返回对象的默认实现可能会引发这样一个问题,即对象比数组的返回值更好,难道不是吗? – 2013-11-13 02:43:46

34

试试这个

$json_string = 'http://www.domain.com/jsondata.json'; 
$jsondata = file_get_contents($json_string); 
$obj = json_decode($jsondata,true); 
echo "<pre>"; 
print_r($obj); 
5

这也将改变它变成一个数组:

<?php 
    print_r((array) json_decode($object)); 
?> 
+5

这是一个浪费CPU /内存,建议'json_decode($ object,true);''true'完全一样,内部速度要快得多。 – TCB13 2013-12-12 00:13:40

+1

@ TCB13除非你同时需要并且不想再次运行解码 – 2015-01-21 10:26:26

+3

与@JimmyKane同时发生。我尝试并在一个循环中运行两个版本;如果你需要对象和数组(尽管这种情况很少发生?),'json_decode' + casting比运行'json_decode'这两种风格快45%。另一方面,两者都非常快,除非需要字面数千*的解码,否则差异可以忽略不计。 – LSerni 2015-05-29 10:35:16

14

这是一个迟到的贡献,但与(array)铸造json_decode有效的情况下。
考虑以下几点:

$jsondata = ''; 
$arr = json_decode($jsondata, true); 
foreach ($arr as $k=>$v){ 
    echo $v; // etc. 
} 

如果$jsondata为空字符串回来过(在我的经验,往往是),json_decode将返回NULL,导致错误警告:的foreach提供了无效的参数( )在线3。你可以添加一行的if/then代码或三元运算符,但IMO它清洁简单地改变管线2 ...

$arr = (array) json_decode($jsondata,true); 

...除非你是json_decode荷兰国际集团百万大阵列的一次,在@ TCB13指出的情况下,绩效可能受到负面影响。

0

在PHP json_decode JSON数据转换为PHP关联数组
对于防爆:$php-array= json_decode($json-data, true); print_r($php-array);

1

请试试这个

<?php 
$json_string = 'http://www.domain.com/jsondata.json'; 

$jsondata = file_get_contents($json_string); 
$obj = json_decode($jsondata, true); 
echo "<pre>"; print_r($obj['Result']); 
?> 
0

尝试这样的:

$json_string = 'https://example.com/jsondata.json'; 
$jsondata = file_get_contents($json_string); 
$obj = json_decode($jsondata); 
print_r($obj->Result); 
foreach($obj->Result as $value){ 
    echo $value->id; //change accordingly 
} 
2

json_decode支持第二个参数,当它设置为TRUE时,它将返回Array而不是stdClass Object。查看json_decode函数的Manual页面查看所有支持的参数及其详细信息。

例如试试这个:

$json_string = 'http://www.example.com/jsondata.json'; 
$jsondata = file_get_contents($json_string); 
$obj = json_decode($jsondata, TRUE); // Set second argument as TRUE 
print_r($obj['Result']); // Now this will works!