PHP декодирование JSON - PullRequest
1 голос
/ 07 июня 2011

Может ли кто-нибудь здесь помочь мне с PHP расшифровкой JSON? Я пытаюсь декодировать JSON API URL

Вот что у меня есть на данный момент:

  $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;

Я думаю, что "." или "-", который я использую, недействительны?

Я хотел бы иметь возможность распечатать каждого работника, а затем указать имя пользователя, имя пользователя и другие вознаграждения. используя массивы или эти объекты, так или иначе. Я также попытался разделить $ String на "," с помощью explode, но не могу заставить это работать так же хорошо.

под управлением Server 2008 R2 с php 5.3 и IIS 7.5

Ответы [ 5 ]

6 голосов
/ 07 июня 2011

Синтаксис фигурных скобок должен работать:

$json_o->workers->{"someusername.jason-laptop"}
5 голосов
/ 07 июня 2011

Вы можете использовать синтаксис фигурных скобок, предложенный Gumbo :

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

Однако, лучший способ (imo, для согласованности) состоит в том, чтобы использовать полученный объект как ассоциативный массив:

$object = json_decode($string, true);

$object['workers']['bitcoinjol.jason-laptop']['last_share']; // 1307389634
2 голосов
/ 07 июня 2011
 $json_o = json_decode($string);
 print_r( $json_o->workers->{"bitcoinjol.jason-laptop"} );
1 голос
/ 07 июня 2011

- или . не являются допустимыми именами свойств объекта.Вместо этого попробуйте использовать json_decode($string, true) (true означает «декодировать как ассоциативный массив»), а затем выполните $json_o['workers']['someusername.jason-laptop'].

1 голос
/ 07 июня 2011

Это должно работать:

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