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');
不幸的是,我有一些格式错误的 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');