【问题标题】:Convert table to JSON array with longtext column将表转换为带有长文本列的 JSON 数组
【发布时间】: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 行。我还添加了想要的结果。
  • 好的。我是否正确理解转义括号 (\") 是唯一将您与成功区分开来的东西?还是我错过了什么?
  • 并在参数条目的开头和末尾附加引号(“)。

标签: sql json mariadb mariadb-10.3


【解决方案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投稿。
猜你喜欢
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 2022-09-24
  • 2016-04-14
  • 2020-11-20
  • 2020-02-01
  • 2014-04-03
  • 2018-06-21
相关资源
最近更新 更多