将表转换为带有长文本列的 JSON 数组
Posted
技术标签:
【中文标题】将表转换为带有长文本列的 JSON 数组【英文标题】:Convert table to JSON array with longtext column 【发布时间】:2021-03-17 11:09:53 【问题描述】:我正在使用 mariaDB 10.3,我有一个表:
CREATE TABLE user(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL, parameters longtext, PRIMARY KEY(id));
有行:
INSERT INTO user VALUES (1, 'name1', '"number": 1, "text": "some text"'), (2, 'name2', '"number": 2, "text": "some more text"');
我正在尝试编写将表返回为JSON
对象的查询。
到目前为止我有
SELECT CONCAT(
'[',
GROUP_CONCAT(JSON_OBJECT('id',id,'name',name,'parameters', parameters)),
']'
)
FROM user;
但这会返回:
[
"id": 1,
"name": "name1",
"parameters": "\"number\": 1, \"text\": \"some text\""
,
"id": 2,
"name": "name2",
"parameters": "\"number\": 2, \"text\": \"some more text\""
]
这不是正确的 JSON。我应该更改什么才能正确格式化parameters
?
我想得到的是:
[
"id": 1,
"name": "name1",
"parameters":
"number": 1,
"text": "some text"
,
"id": 2,
"name": "name2",
"parameters":
"number": 2,
"text": "some more text"
]
谢谢
【问题讨论】:
(1) 如果您只有 1 行,您希望GROUP_CONCAT
完成什么? (2) 请在您的问题中添加所需的结果。 (使用Edit)。
你是对的,为简单起见,我只展示了 1 行,但要使这个问题有意义,最少 2 行。我还添加了想要的结果。
好的。我是否正确理解转义括号 (\"
) 是唯一将您与成功区分开来的东西?还是我错过了什么?
并在参数条目的开头和末尾附加引号(“)。
【参考方案1】:
JSON_COMPACT
函数是 MariaDB 特有的,在 mysql 中不存在,可以应用于 parameters
列
SELECT CONCAT(
'[',
GROUP_CONCAT(JSON_OBJECT('id',id,
'name',name,'parameters',
JSON_COMPACT(parameters))),
']'
) AS "JSON Value"
FROM user
Demo
【讨论】:
谢谢,这正是我所需要的。 不客气@friltase,也欢迎为SO投稿。以上是关于将表转换为带有长文本列的 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章