2011-06-07 81 views
1

任何人都可以在這裏幫助我一個解碼json?我試着去解碼JSON API URLPHP解碼json

這裏是我的時刻:

$string = ' 
    { 
     "username": "someusername", 
     "unconfirmed_reward": "0.08681793", 
     "send_threshold": "0.01000000", 
     "confirmed_reward": "0.02511418", 
     "workers": 
     { 
     "bitcoinjol.jason-laptop": {"last_share": 1307389634, "score": "0", "hashrate": 0, "shares": 0, "alive": false}, 
     "bitcoinjol.david-laptop": {"last_share": 1307443495, "score": "1.7742", "hashrate": 24, "shares": 1, "alive": true}, 
     "bitcoinjol.pierre-pc": {"last_share": 1307441804, "score": "0", "hashrate": 0, "shares": 0, "alive": true}, 
     "bitcoinjol.testJol": {"last_share": 0, "score": "0", "hashrate": 0, "shares": 0, "alive": false} 
     }, 
     "wallet": "asdasdjsadajdasjdsajasjdajdajs", 
     "estimated_reward": "0.00131061" 
    }'; 

    $json_o = json_decode($string); 
    echo $json_o->username; 

這種打印出「someusername」,但我不能把它打印出來的工人,當我嘗試:

echo $json_o->workers->someusername.jason-laptop; 

我認爲「。」或者我使用的「 - 」是無效的?

我希望能夠打印出每個工人,然後打印出waller,用戶名和獎勵等。 使用數組或這些對象,無論哪種方式。我也嘗試用爆炸分割$,「」,但無法讓它很好地工作。

運行Server 2008 R2與PHP 5.3和IIS 7.5

+0

使用print_r();在數組或對象上顯示詳細信息。回聲僅適用於字符串。 – hakre 2011-06-07 11:51:38

回答

5

可以使用大括號語法Gumbo建議:

$json_o->workers->{"someusername.jason-laptop"} 

然而,最好的方式(IMO,爲了一致性)是使用所得到的物體作爲關聯數組:

$object = json_decode($string, true); 

$object['workers']['bitcoinjol.jason-laptop']['last_share']; // 1307389634 
+0

工作,非常感謝 – 2011-06-07 11:58:27

1

這應該工作:

$json_o->workers['someusername.jason-laptop']; 
+1

感謝您的回覆,但我得到錯誤500與.. – 2011-06-07 11:46:05

+0

致命錯誤:不能使用stdClass類型的對象作爲數組在...' – 2011-06-07 11:52:08

+0

您需要將json字符串解碼爲數組,然後才能工作。請參閱json_decode()參數。 – hakre 2011-06-07 11:55:24

6

大括號語法應該工作:

$json_o->workers->{"someusername.jason-laptop"} 
1

-.無效對象的屬性名。嘗試使用json_decode($string, true) (真正代表「解碼爲關聯數組」),然後執行$json_o['workers']['someusername.jason-laptop']

+0

[Gumbo已經顯示它如何與對象工作。](http://stackoverflow.com/questions/6264598/php-decoding-json/6264646#6264646) – hakre 2011-06-07 11:54:23

+0

我不覺得它是一個非常優雅的解決方案因爲「bitcoinjol.jason-laptop」不是有效的屬性名稱。它可能有用,但它主要是錯誤的。 – cypher 2011-06-07 12:00:44

+0

這不是一個可能,它只是起作用。所以它主要是對的。您可能不喜歡以這種方式編寫屬性,但正如您所看到的那樣,它是可供訪問的json對象的有效屬性名稱。 – hakre 2011-06-07 12:02:56

2
$json_o = json_decode($string); 
print_r($json_o->workers->{"bitcoinjol.jason-laptop"}); 
+0

這工作,非常感謝! – 2011-06-07 11:56:20