我有以下 JSON:
{
"params" : {
"A" : 200.5,
"B" : 70.2
}
}
以及下表:
CREATE TABLE `params` (
`param` varchar(255),
`value` float
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
有没有一种方法可以让mysql通过一个插入查询来运行,而不需要使用“while do”直接将所有参数插入到表中,如下所示:
-------+-------
| param | value |
|-------+-------|
| A | 200.5|
| B | 70.2|
---------------
最佳答案
如果您运行的是 MySQL 8.0,则可以使用 json_keys()
从 json 子对象中动态提取键作为 json 数组,然后使用 json_table()
将其变成行。然后您可以提取值。
考虑:
insert into `params`
with t as (select '{"params": { "A": 200.5, "B": 70.2 } }' js)
select x.k, json_extract(js, concat('$.params.', x.k)) v
from
t
cross join json_table(
json_keys(js->"$.params"),
"$[*]" columns(k varchar(255) path "$")
) as x
运行查询后表的内容:
param | value :---- | ----: A | 200.5 B | 70.2
关于MySQL JSON 对象插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59029637/