2011-06-07 215 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