2017-04-04 63 views
0

我读了关于MySQL 5.7的功能,我很好奇是否有可能以JSON格式返回选择的给定行或将整个结果作为JSON格式返回。 我的数据是看起来像一个正常的MySQL表:MySQL选择返回为JSON

| 13162 |   1 | 178803 | 093ea6a6-1077-4ea4-8a23-647e1d621b4a             | 1485260588 | NULL | 
| 13163 |   1 | 178803 | 6f34579b-4745-4ec3-babd-ab12aab5b99c             | 1485260718 | NULL | 
| 13165 |   1 | 178802 | 6f34579b-4745-4ec3-babd-ab12aab5b94c             | 1485260705 | NULL | 
| 13166 |   1 | 178022 | 6f34579b-4745-4ec3-babd-ab12a4b5b94c             | 1485260645 | NULL | 
| 13168 |   1 | 178022 | 6f34579b-4745-4ec3-babd-ab32a4b5b94c             | 1485250645 | NULL | 
| 13169 |   1 | 178022 | 6f34579b-4745-4ec3-babd-ab32a4b5b945             | 1475250645 | NULL | 
| 13170 |   1 | 176022 | 6f34579b-4745-4ec3-babd-ab32a4b5b9e5             | 1465250645 | NULL | 
| 13171 |   1 | 170022 | 6f34579b-4745-4ec3-babd-ab32a4a5b9e5             | 1425250645 | NULL | 
| 13172 |   1 | 170022 | 6f34579b-4745-4ec3-babd-ab32a4aeb9e5             | 1426250645 | NULL | 
| 13173 |   1 | 178804 | ea7bcd3b-0f04-4ace-ba9b-a26d297029f7             | 1486474710 | NULL | 
| 13174 |   1 | 178804 | 39855021-ceb8-4178-a3cc-0ba11cf4490a             | 1486475039 | NULL | 
| 13175 |   1 |  2 | 6f34569b-4745-4ec3-b3bd-ab32a4aeb9e5             |  NULL | NULL | 
| 13176 |   1 |  2 | 39855021-ceb8-4578-a3cc-0ba11cf4490a             |  NULL | NULL | 
| 13177 |   1 |  2 | 39852021-ceb8-4578-a3cc-0ba11cf4490a             |  NULL | NULL | 
| 13178 |   1 |  2 | 39855421-ceb8-4578-a3cc-0ba11cf4490a             |  NULL | NULL | 

我使用的是SELECT * FROM AccessToken;查询。我怎样才能找回JSON格式的结果?我想在数据库级别上做,因为当我有大量的数据时,编程级别太慢了。我的意思是当我有20万用户使用Go花8秒将它们转换为JSON时。

例如结果:

{ 
    [ 
    { 
     "id": 1123, 
     "token": "asdjkasldkjlasdjf" 
    }, 
    { 
     "id": 11323, 
     "token": "asdjkasdasdasldkjlasdjf" 
    } 
    ] 
} 
+0

你想让你的JSON拥有什么结构? –

+0

@StefanoZanini你是什么意思结构?对于我而言,取回正常的json并不重要,但我更新了例如我想要查看数据的方式。 – PumpkinSeed

+0

@LelioFaieta json_encode用什么? – PumpkinSeed

回答

1

的JSON在你的例子是无效的,但这应该做你的愿望

select concat('[', 
       group_concat(concat('{"id": "', 
            col1, 
            '", "token": "', 
            col2, 
            '"}' 
          ) separator ','), 
       ']') 
from myTable 

,或者,如果你想获得一个对象,而不是一个array

select concat('{ "array": [', 
       group_concat(concat('{"id": "', 
            col1, 
            '", "token": "', 
            col2, 
            '"}' 
          ) separator ','), 
       ']}') 
from myTable 

你在concat函数中连接的东西显然取决于您的表格的列名称。

+0

是的,但我认为有一个像Postgres SELECT'array_to_json(array_agg(t))FROM t'这样的内置函数,因为在我的例子中它只是一个例子,一个去查询生成器,其中总是有不同类型的查询。因此,查询的外观是不可预测的。 – PumpkinSeed

+0

据我所知,MySQL中没有内置函数可以做到这一点 –