mariadb 将表转换为具有长文本列的JSON数组

mctunoxg  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(163)

我使用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"
    }
  }
]


谢啦,谢啦

ulydmbyx

ulydmbyx1#

只有JSON_COMPACT函数可以应用于parameters列,该函数适用于MariaDB,在MySQL中不存在

SELECT CONCAT(
       '[',
        GROUP_CONCAT(JSON_OBJECT('id',id,
                                 'name',name,'parameters', 
                                  JSON_COMPACT(parameters))),
       ']'
       ) AS "JSON Value"
  FROM user

字符串
Demo

ylamdve6

ylamdve62#

您可以使用JSON_OBJECT、**JSON_ARRAYAGG(expr)**概念来获取结果。参考:https://www.tutorialspoint.com/mysql/mysql_aggregate_functions_json_arraygg.htm
我在我的一个项目工作中使用了这个

相关问题