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

使用JSON_MODIFY追加变量时出现转义字符问题求助

解决JSON_MODIFY追加变量时的转义问题

嘿,我之前也踩过这个坑!这是因为SQL Server默认会把字符串变量当成普通文本处理,自动转义双引号,导致你得到的是带转义的字符串数组,而非预期的对象数组。下面给你讲清楚怎么搞定它:

问题根源

当你直接把字符串形式的JSON变量传给JSON_MODIFY时,SQL Server会把它当作普通字符串插入,而不是解析成JSON对象。为了保证字符串的合法性,它会自动转义双引号,最后就出现了你看到的["{\"name\":\"PosTitle\",...}"]这种结果。

解决方案:用JSON_QUERY()包裹变量

核心技巧就是用JSON_QUERY()告诉SQL Server:“这不是普通字符串,是合法的JSON片段!”,这样它就不会转义引号,而是直接把对象插入目标数组。

完整代码示例

-- 初始化原始JSON对象
DECLARE @originalJson NVARCHAR(MAX) = '{"data": []}';
-- 要追加的fieldError对象(确保是合法的JSON字符串)
DECLARE @fieldErrorObj NVARCHAR(MAX) = '{"name":"PosTitle","status":"the field is messed up, yo"}';

-- 正确写法:用JSON_QUERY包裹变量,指定append模式
SET @originalJson = JSON_MODIFY(
    @originalJson,
    'append $.fieldErrors', -- append表示往数组末尾加元素,若fieldErrors不存在则自动创建数组
    JSON_QUERY(@fieldErrorObj) -- 关键:避免转义的核心操作
);

-- 查看最终结果
SELECT @originalJson AS FinalResult;

执行结果

你会得到完全符合预期的JSON:

{"data":[],"fieldErrors":[{"name":"PosTitle","status":"the field is messed up, yo"}]}

错误写法对比(为什么会出问题)

如果跳过JSON_QUERY()直接传变量,就会触发自动转义:

SET @originalJson = JSON_MODIFY(
    @originalJson,
    'append $.fieldErrors',
    @fieldErrorObj
);

结果就是你遇到的带转义的字符串数组:

{"data":[],"fieldErrors":["{\"name\":\"PosTitle\",\"status\":\"the field is messed up, yo\"}"]}

额外提示

如果你的@fieldErrorObj是动态拼接出来的(比如从其他表或变量组装),只要确保最终是合法的JSON字符串,再用JSON_QUERY()包裹就没问题。要是不确定拼接内容是否合法,可以先用ISJSON()做个验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:21:25