2011-03-02 149 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!