6

このJSON文字列を別のサイトから受け取りましたが、受け取ったものを変更できません。文字列は$_POSTで受信され、次のようになります。

[
    {
        "clientId":"17295c59-4373-655a-1141-994aec1779dc",
        "channel":"\/meta\/connect",
        "connectionType":"long-polling",
        "ext":{
            "fm.ack":false,
            "fm.sessionId":"22b0bdcf-4a35-62fc-3764-db4caeece44b"
        },
        "id":"5"
    }
]

次のコードでJSON文字列をデコードします。

$receive = json_decode(file_get_contents('php://input'));

そして、私が使用するprint_r($receive)と、次のようになります。

Array (
[0] => stdClass Object
    (
        [clientId] => 17295c59-4373-655a-1141-994aec1779dc
        [channel] => /meta/connect
        [connectionType] => long-polling
        [ext] => stdClass Object
            (
                [fm.ack] => 
                [fm.sessionId] => 22b0bdcf-4a35-62fc-3764-db4caeece44b
            )

        [id] => 5
    )
)

すべての配列/オブジェクトに問題なくアクセスして読み取ることができます:

$receive[$i]->clientId;
$receive[$i]->channel;
$connectionType = $receive[$i]->connectionType;
$receive[$i]->id;
$receive[$i]->ext->{'fm.sessionId'};

しかし、{fm.ack}は空です

デコードされたJSON文字列では、false値はの間にありません""

false値にアクセスして読み取り、代わりに文字列値に変換することは可能ですか?

助けてくれてありがとう!

4

3 に答える 3

11

あなたはそれをこのように使うことができます、あなたが価値JSONを評価するときそれはあなたに与えるでしょう、そしてあなたがそれを評価するときそれはあなたに与えるでしょう。falseblanktrue1

$str = '[{"clientId":"17295c59-4373-655a-1141-994aec1779dc","channel":"\/meta\/connect","connectionType":"long-polling","ext":{"fm.ack":false,"fm.sessionId":"22b0bdcf-4a35-62fc-3764-db4caeece44b"},"id":"5"}]';

$arr = json_decode($str,true);

if($arr[0]['ext']['fm.ack'])    // suggested by **mario**
{
    echo "true";    
}
else {
    echo "false";   
}
于 2013-02-26T04:21:04.687 に答える
1

これに対する答えはすでにあることは知っていますが、var_dumpブール値をより適切に出力すると、IMOのフォーマットがより悪くなることに注意する価値があるかもしれません。

<pre>
    <?php
        print_r(array(true, false));
        var_dump(array(true, false));
    ?>
</pre>

結果は

Array
(
    [0] => 1
    [1] => 
)
array(2) {
  [0]=>
  bool(true)
  [1]=>
  bool(false)
}
于 2015-12-03T14:16:05.970 に答える
0

とても簡単です。jsを使用してjsonを生成および転送する場合は、変数を純粋な形式ではなく、次のように渡します。youBoolVar + 0すると、falseは0になり、trueは1になります。

于 2017-03-23T04:24:57.593 に答える