You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将对象存入MySQL JSON字段?更新JSON数组转字符串问题求助

刚好对MySQL JSON操作比较熟,来帮你解决这两个问题:

1. 如何将对象存储到MySQL的JSON数据类型字段中?

分两种场景来说,操作起来都很直观:

插入新记录时

如果是新增数据,直接在INSERT语句里传入标准的JSON字符串就行(前提是字段已经设为JSON类型):

INSERT INTO jsontest (content) VALUES ('{"a": "testA", "b": [{"b1": "testB1"}]}');

要是你需要动态生成JSON对象,用MySQL自带的JSON_OBJECT()和JSON_ARRAY()函数会更灵活,比如:

INSERT INTO jsontest (content) VALUES (
    JSON_OBJECT(
        'a', 'testA',
        'b', JSON_ARRAY(JSON_OBJECT('b1', 'testB1'))
    )
);

更新已有记录时

如果要替换整个JSON字段的内容,直接赋值新的JSON字符串或用函数构造的对象就行:

UPDATE jsontest SET content = '{"a": "newVal", "b": []}' WHERE id = 1;

要是只更新对象里的某个属性,用JSON_SET()函数精准修改:

UPDATE jsontest SET content = JSON_SET(content, '$.a', 'updatedTestA') WHERE id = 1;

2. 修复JSON_SET把数组转成字符串的问题

你遇到的核心问题是:你传入的数组是普通字符串,MySQL默认会把它当成字符串存储,而不是JSON数组。另外你的路径写错了——原JSON里的b是顶级属性,路径应该是$.b,不是$[0].b($[0]是用来定位数组元素的,你的content是对象不是数组)。

给你两种可行的解决方案:

方案一:用JSON函数构造数组

直接用JSON_ARRAY()和JSON_OBJECT()生成原生JSON结构,MySQL会自动识别为JSON类型:

UPDATE jsontest 
SET content = JSON_SET(content, '$.b', JSON_ARRAY(
    JSON_OBJECT('b4', 'testB4'),
    JSON_OBJECT('b5', 'testB5'),
    JSON_OBJECT('b6', 'testB6')
)) 
WHERE id = '1';

方案二:把字符串转为JSON类型

如果你习惯写字符串形式的JSON,用CAST()把字符串强制转为JSON类型即可:

UPDATE jsontest 
SET content = JSON_SET(content, '$.b', CAST('[{"b4": "testB4"}, {"b5": "testB5"}, {"b6": "testB6"}]' AS JSON)) 
WHERE id = '1';

执行任意一种方案后,你再查询content字段,b就会是JSON数组类型,而不是字符串了。

内容的提问来源于stack exchange,提问作者Yeah oh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:46:05