T-SQL 中 STRING_ESCAPE() 的倒数,用于转义 JSON

Inverse of STRING_ESCAPE() in T-SQL for escaped JSON

不幸的是,我有一些格式错误的 JSON,其中内部 JSON 对象(输出值)被转义,无法正确读取。

示例:

DECLARE @jsonContent nvarchar(max) = '{"output":"{\n\"latest_activity\": \"2021-12-04T08:32:19.343228\"\n}"}'

SQL 服务器似乎不喜欢这个 - 下面的 returns NULL

  SELECT JSON_VALUE(@jsonContent, '$.output.latest_activity') AS latest_activity

但是,通过将转义的双引号替换为双引号,以下得到了预期的结果:

  SELECT CAST(
            JSON_VALUE(
                REPLACE(
                    JSON_VALUE(@jsonContent, '$.output')
                    , '\"', '')
                , '$.latest_activity')
            AS datetime2(7))
        AS [latest_activity]

是否有更好的方法来完成此操作并处理其他转义字符?

我希望得到与内置 STRING_ESCAPE 函数相反的结果,可惜不存在。

这个 JSON 本身并没有畸形,它只是被字符串化了 JSON。您需要使用 JSON_VALUE 获取 output 属性,然后再次使用 JSON_VALUE

DECLARE @jsonContent nvarchar(max) = '{"output":"{\n\"latest_activity\": \"2021-12-04T08:32:19.343228\"\n}"}';

SELECT JSON_VALUE(JSON_VALUE(@jsonContent, '$.output'), '$.latest_activity');

db<>fiddle