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 值不在"".

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

谢谢你的帮助!

4

3 回答 3

11

你可以像这样使用它,在你评估value 时它会给你的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 回答