如何将 mysql 数据库中的 select 键和值转换为 json 格式

how to select keys and values from mysql database to a json format

mysql5.7 已支持 json 数据类型。许多问题和办公文档显示如何将 key/value 保存为 json 格式到 mysql 数据库中。

我的问题是如何在直接执行select时将key/value格式转换为json格式? 例如:

table 的描述如下:

desc ttlsa_users\G;

*************************** 1. row ***************************

Field: uid
Type: int(11) unsigned
Null: NO
Key: PRI
Default: NULL
Extra:

*************************** 2. row ***************************

Field: username
Type: varchar(40)
Null: NO
Key: 
Default: NULL
Extra: 

=============================================================

并且table中有一条记录:

uid:1
username:"Jim";

我想要 json 格式,例如 {"uid":"1","username":"jim}

如何从 table 中 select 以便数据库键可以是 json 键并且数据库值可以是 json 值?

我想这样做的原因是我需要 select 来自 mysql 数据库的数据并在我的程序中将它们传输为 json 格式。

还有一个问题,如果数据可以传输,mysql需要做转换,性能如何?

使用JSON_OBJECT

JSON_OBJECT([key, val[, key, val] ...])
Evaluates a (possibly empty) list of key/value pairs and returns a JSON object containing those pairs. An error occurs if any key name is NULL or the number of arguments is odd.

所以你的查询是

SELECT JSON_OBJECT('uid',uid,'username',username) FROM ttlsa_users

至于性能,除非您一次获取数万条记录,否则无论您是在此处还是在客户端执行都无所谓。如果这是一个 Web 应用程序,那么在很可能的情况下,您只会获取少量记录。因此性能将主要取决于您的查询是否使用索引等的效率。

在php中的代码如下:

$return_arr = array();
    $fetch = mysql_query("SELECT * FROM ttlsa_users\G"); 

    while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
        $row_array['uid'] = $row['uid'];
        $row_array['username'] = $row['username'];

        array_push($return_arr,$row_array);
    }

    echo json_encode($return_arr);