【问题标题】:Mysql / PHP / json_encode boolean string conversionMysql / PHP / json_encode 布尔字符串转换
【发布时间】:2014-06-02 22:01:18
【问题描述】:

我有一个 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 - 但我认为还有其他选择,不是吗?

【问题讨论】:

  • 你打算如何使用布尔值?在 JavaScript 中?
  • 我使用 jstree 并且 jstree 需要一个像 {"children":false} 的符号
  • 如果你使用 php,你可以这样做:$result[]['children'] = $data['children']?真假;你怎么看?
  • 是的,我想我可以做到——但我必须遍历数组——在这种情况下,我也可以使用 str_replace,这似乎不是最好的解决方案——我不想遍历正是因为如此,给定的数组

标签: php mysql json


【解决方案1】:

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

$data['id'] = (bool)$data['id']; // 0/1 -> PHP false/true

echo json_encode($data); // {'id':true}

【讨论】:

  • 是的,在这种情况下,我也必须遍历数组 - 但我猜你是对的 - 这似乎是目前最好的解决方案
【解决方案2】:

我遇到了同样的问题:

我使用 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

【讨论】:

    【解决方案3】:

    这里的问题是mysql返回的数据是字符串,不是布尔值。如果您知道它总是“真”或“假”,则可以将其与字符串文字进行比较以获得正确的类型:

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

    然后,当它是 json_encoded() 时,它将被表示为原始布尔值,而不是字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 2011-11-12
      • 2015-11-30
      • 2013-03-23
      • 2018-09-07
      • 2014-09-21
      • 1970-01-01
      • 2021-02-27
      相关资源
      最近更新 更多