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

MySQL使用JSON_ARRAY_APPEND添加JSON对象异常问题求助

解决MySQL中JSON对象添加新键值对的问题

你的问题核心是选错了JSON操作函数——JSON_ARRAY_APPEND是用来给数组追加元素的,但你的原始数据是一个JSON对象,并非数组;再加上你把新的JSON结构当成普通字符串传入,自然就出现了数组包裹和多余转义符的问题。下面给你两种靠谱的解决方案:

方法1:用JSON_MERGE_PRESERVE直接合并JSON对象

这个函数可以无缝合并两个JSON对象,保留原有键的同时添加新的键值对,语法简单直观:

UPDATE calculation 
SET payment = JSON_MERGE_PRESERVE(payment, '{"2018": {"1": {"payed": 0,"charge": 0}}}');

执行后会直接把原有payment字段的JSON对象和你传入的新JSON对象合并,得到你期望的结果。

方法2:用JSON_SET精准插入新键

如果想要更精准地控制键的路径,推荐用JSON_SET搭配JSON_OBJECT构建嵌套JSON(避免手动写字符串可能出现的格式错误):

UPDATE calculation 
SET payment = JSON_SET(
    payment, 
    '$.2018', 
    JSON_OBJECT(
        '1', 
        JSON_OBJECT('payed', 0, 'charge', 0)
    )
);

这里'$.2018'是新键的路径,JSON_OBJECT会帮你生成规范的嵌套JSON结构,完全不需要担心转义符的问题,MySQL会自动处理成正确的格式。

为什么原来的方法会出错?

  • JSON_ARRAY_APPEND的定位是数组操作:如果目标不是数组,它会先把目标包裹成数组的第一个元素,再追加你传入的内容,这就是你看到[{"2017": ...}]数组结构的原因。
  • 你传入的新JSON是字符串形式,MySQL会把它当作普通字符串值存入数组,因此会自动转义双引号,导致出现\"这类多余的转义符。

内容的提问来源于stack exchange,提问作者Igor Petev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:37:59