首页 > 解决方案 > 如何在 Javascript 中将字符串布尔值从 MySQL 转换为真正的布尔值?

问题描述

我为我的 ReactJS 前端构建了一个 php 后端。

我的 mysqlusers表有一checkedIn列存储为tinyint. 我正在获取它:

<?php
// ...
$getUser = "SELECT * FROM `users` WHERE `uid`=:uid AND `unique_id`=:unique_id";
$getUser_stmt = $conn->prepare($getUser);
$getUser_stmt->bindValue(':uid', $uid,PDO::PARAM_STR);
$getUser_stmt->bindValue(':unique_id', $unique_id,PDO::PARAM_STR);
$getUser_stmt->execute();
//...

在我的前端:

  useEffect(() => {
    axios
      .get(`${config.server}/api/user.php?uid=${match.params.uid}`)
      .then((result) => {
        console.log(result.data.message);
        setUser(result.data.message);
      })
      .catch((error) => console.error(error));
  }, [match.params.uid]);

我的日志给了我:

{
  "id": "5",
  "uid": "A0005",
  "unique_id": "1384773b4df62",
  "mail": "mail@test.com",
  "date_checkin": "2021-05-03 11:00:35",
  "checkedIn": "1"
}

如何修改我的后端或前端,以便checkedIn在前端具有真正的布尔值?

我预计:

{
  "id": 5,
  "uid": "A0005",
  "unique_id": "1384773b4df62",
  "mail": "mail@test.com",
  "date_checkin": Date Mon May 03 2021 17:15:27 GMT+0200,
  "checkedIn": true
}

作为副作用:如何将 id 转换为 Number 并将时间戳转换为 Date?

标签: javascriptphpmysqlreactjs

解决方案


创建一个函数convert做这些转换:

let user = `{
  "id": "5",
  "uid": "A0005",
  "unique_id": "1384773b4df62",
  "mail": "mail@test.com",
  "date_checkin": "2021-05-03 11:00:35",
  "checkedIn": "1"}`;

function convert(data){
    data["id"] = data["id"]*1;//Int
    data["checkedIn"] = !(data["checkedIn"]==='0');//Bool
    data["date_checkin"] = Date(data["date_checkin"]);//Date
    return data;
}
convert(JSON.parse(user));

注意:用户有JSON格式。所以使用函数将其转换为真实对象JSON.parse()


推荐阅读