MySQL JSON_OBJECT() 一些字段已经包含 JSON 字符串
MySQL JSON_OBJECT() with some fields already containing JSON String
如何获得 3 列的 JSON_OBJECT(),其中 一些列已经包含 JSON 格式字符串 。
这是我的示例,其中 info
字段包含一个 json 字符串,因此所有对象都被转义了:
SELECT
T1.id,
CONCAT(
'{"elements": [',
GROUP_CONCAT(
JSON_OBJECT(
'type', T2.`type`,
'data', T2.`data`,
'info', T2.`info` <<-- JSON stored string in varchar(100)
)
),
']}'
) AS `elements`,
FROM `table` T1
INNER JOIN `table2` T2
ON T1.`id` = T2.`fk_t1_id`
GROUP BY T1.`id`
也许,使用JSON格式的新存储功能会更好,但我还没有测试过。你怎么看?
我找到的最佳解决方案是将 JSON_MERGE() 与 JSON_OBJECT() 和 CONCAT()
结合使用
SELECT
T1.id,
CONCAT(
'{"elements": [',
GROUP_CONCAT(
JSON_MERGE(
JSON_OBJECT(
'type', T2.`type`,
'data', T2.`data`
),
CONCAT('{"info": ', T2.`info`, '}')
)
),
']}'
) AS `elements`,
FROM `table` T1
INNER JOIN `table2` T2
ON T1.`id` = T2.`fk_t1_id`
GROUP BY T1.`id`
如何获得 3 列的 JSON_OBJECT(),其中 一些列已经包含 JSON 格式字符串 。
这是我的示例,其中 info
字段包含一个 json 字符串,因此所有对象都被转义了:
SELECT
T1.id,
CONCAT(
'{"elements": [',
GROUP_CONCAT(
JSON_OBJECT(
'type', T2.`type`,
'data', T2.`data`,
'info', T2.`info` <<-- JSON stored string in varchar(100)
)
),
']}'
) AS `elements`,
FROM `table` T1
INNER JOIN `table2` T2
ON T1.`id` = T2.`fk_t1_id`
GROUP BY T1.`id`
也许,使用JSON格式的新存储功能会更好,但我还没有测试过。你怎么看?
我找到的最佳解决方案是将 JSON_MERGE() 与 JSON_OBJECT() 和 CONCAT()
结合使用SELECT
T1.id,
CONCAT(
'{"elements": [',
GROUP_CONCAT(
JSON_MERGE(
JSON_OBJECT(
'type', T2.`type`,
'data', T2.`data`
),
CONCAT('{"info": ', T2.`info`, '}')
)
),
']}'
) AS `elements`,
FROM `table` T1
INNER JOIN `table2` T2
ON T1.`id` = T2.`fk_t1_id`
GROUP BY T1.`id`