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

SQL Server修改JSON时如何避免URL等属性出现转义序列

解决SQL Server JSON_MODIFY中URL斜杠被转义的问题

问题根源

你遇到的斜杠被转义成\/的情况,本质是FOR JSON PATH的默认行为:它会自动转义JSON规范中的特殊字符(包括正斜杠),即便你用JSON_QUERY包裹结果避免了JSON_MODIFY的二次转义,FOR JSON生成数组时已经完成了转义操作。

解决方案

要避免这种不必要的转义,核心是让FOR JSON识别URL类字段已经是合法的JSON字符串值,无需再处理。可以通过JSON_QUERY将这些字段直接包装成JSON格式的字符串,跳过FOR JSON的转义逻辑。

修改后的查询语句如下:

SELECT TOP 1  JSON_MODIFY(
           CASE WHEN ISNULL([_DOCUMENTS],'') = '' THEN '{}' ELSE [_DOCUMENTS] END ,
           '$.Documents',
           JSON_QUERY(
              (
              SELECT 
                 Title,
                 Category,
                 NumberOfPages,
                 SizeInBytes,
                 MimeType,
                 [Date],
                 ResourceId,
                 ResourceType,
                 ParentEntityType,
                 JSON_QUERY('"' + [Url] + '"') AS [Url],
                 [Site],
                 [Description],
                 JSON_QUERY('"' + PreviewImageUrl + '"') AS PreviewImageUrl,
                 LanguageCode,
                 Sort
              FROM OPENJSON([_DOCUMENTS], '$.Documents') WITH (
                 Title nvarchar(1000) '$.Title',
                 Category nvarchar(1000) '$.Category',
                 NumberOfPages INT '$.NumberOfPages',
                 SizeInBytes INT '$.SizeInBytes',
                 MimeType nvarchar(1000) '$.MimeType',
                 [Date] nvarchar(1000) '$.Date',
                 ResourceId INT '$.ResourceId',
                 ResourceType INT '$.ResourceType',
                 ParentEntityType INT '$.ParentEntityType',
                 [Url] nvarchar(1000) '$.Url',
                 [Site] nvarchar(1000) '$.Site',
                 [Description] nvarchar(1000) '$.Description',
                 PreviewImageUrl nvarchar(1000) '$.PreviewImageUrl',
                 LanguageCode nvarchar(1000) '$.LanguageCode',
                 Sort INT '$.Sort'
              )
              WHERE LanguageCode != N'ru'
              FOR JSON PATH
              )
           )
        )
    FROM [dbo].[myTalbe]

注意事项

如果你的URL字段中包含双引号,直接拼接'"' + [Url] + '"'会破坏JSON结构,此时需要先转义双引号:

JSON_QUERY('"' + REPLACE([Url], '"', '\"') + '"') AS [Url]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:45:46