PHP JSon如何读取以JSon格式接收的布尔值并在PHP上写入字符串

时间:2013-02-26 04:14:10

标签: php json

我从另一个站点收到此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
    )
)

我可以毫无问题地访问和读取所有Array / Object:

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

但是{fm.ack}是空的

在解码的JSON字符串中,false值不在""之间。

是否可以访问和读取false值并将其转换为字符串值?

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

您可以JSON格式使用false格式评估blank格式,true评估1它会给您$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"; } {1}}。

{{1}}

false http://codepad.viper-7.com/7FBQfS

的工作示例

真实http://codepad.viper-7.com/LX0pc6

的工作示例

答案 1 :(得分: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)
}

答案 2 :(得分:0)

这很简单。如果你使用js来生成和传输json,那么传递你的变量不是纯粹的形式,而是:youBoolVar + 0,那么false将是0,而真正的1