SQL将JSON插入表列

qyuhtwio  于 2022-11-26  发布在  其他
关注(0)|答案(5)|浏览(193)

在寻找插入数组到单个数据库列的方法时,我发现了一篇关于插入JSON字符串的文章。但是没有解释如何插入。我试着搜索并找到了插入的方法,但没有成功。

我有下表:

+---------+----------------+----+
|  Name   |      Type      |    |
+---------+----------------+----+
| id      | int            | AI |
| name    | String         |    |
| address | JSON(longtext) |    |
+---------+----------------+----+

我想做的是在address列中插入一个Json数组。例如:

+----+-----------+------------------------------------------+
| id |   name    |                 address                  |
+----+-----------+------------------------------------------+
|  1 | User name | [{street: "street address", city: "Berlin"}] |
+----+-----------+------------------------------------------+

我考虑过将JSON作为字符串插入,但我不确定这是否是个好主意。有什么建议吗?

k3bvogb1

k3bvogb11#

可以将数据作为字符串传递,只要它是有效的JSON; MySQL将很乐意在引擎盖下为您转换它。

insert into mytable (id, name, address)
values (
    1,
    'User name',
    '[{"street": "street address", "city": "Berlin"}]'
);

另一种方法是使用JSON构建器函数:

insert into mytable (id, name, address)
values (
    1,
    'User name',
    json_array(json_object('street', 'street address', 'city', 'Berlin'))
);
ssm49v7z

ssm49v7z2#

CREATE TABLE people (id INT, name VARCHAR(255), address JSON);

INSERT INTO people (id, name, address)
VALUES (1, 'User name', '[{"street": "street address", "city": "Berlin"}]');

SELECT *
FROM people;

| 标识符|姓名|位址|
| - -|- -|- -|
| 一个|使用者名称|[{“城市”:“柏林”,“街道”:“街道地址”}]|
小提琴

ufj5ltwl

ufj5ltwl3#

如果MySQL中已经有JSON数据类型,为什么要转换为String

INSERT INTO <Table_Name> VALUES ('{street: "street address", city: "Berlin"}');

此插入语句将直接插入您的数组。不需要转换。
见此stackoverflow answer

egdjgwm8

egdjgwm84#

@GMB的替代答案看起来是正确的,但我想我会添加另一个答案,以显示我如何以我喜欢的格式实现这一点:

INSERT INTO <table name>  
SET field1 = '123',
    field2 = json_array(‘456’);

我喜欢在字段值旁边列出字段名称,这样就不必在心里将值Map到变量。
此外,我不需要json_object,因为我没有输入key:value对-我只是输入一个值列表。

yzckvree

yzckvree5#

这在我的例子中是有效的。总之使用ARRAY[CAST('{"key": "val"}' as json)]
示例:

insert into <table_name> (id, name, address)
values ('1', 
        'User name', 
         array[cast('{"street": "street address", "city": "Berlin"}' as json)])

相关问题