Mysql/PHP/json_encode布尔字符串转换


Mysql / PHP / json_encode boolean string conversion

我有一个mysql查询,比如说:

SELECT cca_id AS id, cca_title AS text,IF((SELECT count(*) from crm_categories WHERE cca_id_prev = id),'TRUE','FALSE') AS children FROM crm_categories WHERE...

现在,我得到了一个数组,其中true/false作为字符串

如果我使用json_encode,结果就像{"id":"false"}

但我需要不带引号的true/false——问题是,如果我在mysql查询中使用true/false作为布尔值,它会返回0/1——但我也不希望这样。。。

当然,我可以对json字符串运行str_replace,但我认为还有其他选择,不是吗?

好吧,您正在从数据库中选择字符串。这就是编码的内容。使用SQL true/false布尔值,这些值在PHP中变为0/1,并在JSON对其进行编码之前将其强制转换为PHP布尔值:

$data['id'] = (bool)$data['id']; // 0/1 -> PHP false/true
echo json_encode($data); // {'id':true}

我遇到了同样的问题:

我使用PHP转换值gettype,例如POST:

foreach ($_POST as $k => $v) {
        settype($_POST[$k], gettype($v));
}}
echo json_encode($_POST);

http://php.net/manual/en/function.settype.php

这里的问题是从mysql返回的数据是字符串,而不是布尔值。如果你知道它总是"true"或"false",你可以将它与字符串文字进行比较,以获得正确的类型:

$row = $stmt->fetch(PDO::FETCH_ASSOC);
$boolval = ($row['boolval'] === 'true');

稍后,当它是json_encoded()时,它将被表示为基元布尔值,而不是字符串。