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

SQL Server转换JSON:处理同一属性同时为字符串和对象的问题

SQL Server JSON数组转混合类型输出解决方案

核心问题原因:SQL Server的FOR JSON默认会将字符串类型的内容做转义处理,如果你需要让某个字段输出为原生JSON对象而非转义后的字符串,必须用JSON_QUERY()函数包裹该字段内容,明确告知数据库该字段为合法JSON不需要转义。

以下是可直接运行的完整实现代码:

DECLARE @InputJson NVARCHAR(MAX) = N'[
    {
        "label": "City",
        "values": [
            "Test City"
        ]
    },
    {
        "label": "imgTest",
        "values": [
            {
                "identifier": "56696553-48F4-4BC5-BB43-FF4F71743EE9",
                "filename": "file1.jpg",
                "contentType": "image/jpg",
                "bytes": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII"
            },
            {
                "identifier": "2D9106D7-71A1-440E-8255-679E8905B32E",
                "filename": "file2.jpg",
                "contentType": "image/jpg",
                "bytes": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII"
            }
        ]
    }
]'

SELECT 
    label,
    CASE 
        -- 处理字符串类型的value
        WHEN ISJSON([value]) = 0 THEN [value]
        -- 处理对象类型的value,JSON_QUERY包裹避免转义
        ELSE JSON_QUERY((
            SELECT filename, contentType, bytes 
            FROM OPENJSON([value]) 
            WITH (
                filename NVARCHAR(200) '$.filename',
                contentType NVARCHAR(100) '$.contentType',
                bytes NVARCHAR(MAX) '$.bytes'
            )
            FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
        ))
    END AS answer
FROM OPENJSON(@InputJson)
WITH (
    label NVARCHAR(100) '$.label',
    values NVARCHAR(MAX) '$.values' AS JSON
)
-- 拆分values数组为多行
CROSS APPLY OPENJSON([values])
FOR JSON PATH

深度嵌套JSON适配方案

如果你的原始JSON嵌套层级很深,可以保留原来的临时表分层处理逻辑,只需要在每一层输出JSON对象类型的字段时,都用JSON_QUERY包裹对应字段即可,完全兼容现有存储过程的实现逻辑,不会出现多余转义字符。

内容的提问来源于stack exchange,提问作者Wouter De Raeve

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:03