MySQL JSON 对象插入

标签 mysql sql json function insert

我有以下 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

<强> Demo on DB Fiddle

运行查询后表的内容:

param | value
:---- | ----:
A     | 200.5
B     |  70.2

关于MySQL JSON 对象插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59029637/

相关文章:

java - 将 String 转换为 JSONObject

mysql - MYSQL 中列的文本限定符

MySQL 查询过滤包含搜索字符串中任何单词的记录

c# - NHibernate OleDB : Invalid program bind when using session. get<T>(id)

java - 使用相同的条件编辑 Mysql 表

java - 我有一个 json 响应,如下所示使用 java.其中一个字段是键 :value pair of an array. 我不知道如何将其作为数组获取

mysql - 当明细记录存在但缺少主表时插入主表

java - 使用 Hibernate 的 Load() 加载 50 列中的单个列

c# - 如何从 Gridview 中获取行并将它们插入数据库?

javascript - 将正则表达式应用于 javascript 中的 uri 变量