如何从mysql数据库中选择键和值为json格式

时间:2016-09-28 10:29:43

标签: mysql json database-performance

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

我的问题是如何在直接进行选择时将键/值转换为json格式? 例如:

表格如下所示:

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: 

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

并且表中有一条记录:

uid:1
username:"Jim";

我想获得像{"uid":"1","username":"jim}这样的json格式。

如何从表中进行选择,以便数据库键可以是json键,数据库值可以是json值?

我想要这样做的原因是我需要从mysql数据库中选择数据并将它们转换为我程序中的json格式。

还有一个问题,如果数据可以传输,那么自mysql需要进行转换以来的性能如何呢?

2 个答案:

答案 0 :(得分:2)

使用JSON_OBJECT

  

JSON_OBJECT([key,val [,key,val] ...])
  评估一个(可能是空的)键/值对列表并返回一个   包含这些对的JSON对象。如果有任何键名,则会发生错误   NULL或参数个数是奇数。

所以你的查询是

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

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

答案 1 :(得分:0)

在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);