将JSON数组转换为Json对象,并在MySQL上向其添加更多项目

问题描述 投票:-1回答:1

在MySQL表中,如何使用先前的值将当前保存JSON数组值的列的值转换为JSON对象的数组?

当前列(仅包含ID):

items
-------

[1,2,3]
[2,3]
...

所需格式:


items
-------

[ { id:1, lastUpdatedBy:"", timeStamp:"--" },{ id:2, lastUpdatedBy:"", timeStamp:"--" },{ id:3, lastUpdatedBy:"", timeStamp:"--" }]
[  { id:2, lastUpdatedBy:"", timeStamp:"--" },{ id:3, lastUpdatedBy:"", timeStamp:"--" }]
...



mysql sql json database group-by
1个回答
2
投票

如果您正在运行MySQL 8.0,则可以使用json_table()取消嵌套该数组,然后构建json对象并使用json_arrayagg()进行聚合。

为此,您需要一个主键-我假设是pk

select json_arrayagg(json_object(
    'id', i.id, 
    'lastUpdatedBy', 12, 
    'timestamp', '--'
)) items
from mytable t
cross join json_table(t.items, '$[*]' columns (id int path '$')) i 
group by t.pk

如果要update查询:

update mytable t
inner join (
    select json_arrayagg(json_object(
        'id', i.id, 
        'lastUpdatedBy', 12, 
        'timestamp', '--'
    )) items
    from mytable t
    cross join json_table(t.items, '$[*]' columns (id int path '$')) i 
    group by t.pk
) x on x.pk = t.pk
set x.items = t.items
© www.soinside.com 2019 - 2024. All rights reserved.