如何在SQL server中保留JSON_值中的新行字符

如何在SQL server中保留JSON_值中的新行字符,json,sql-server,Json,Sql Server,如何在SQL server的JSON_值输出中保留新行字符 DECLARE @jsonString NVARCHAR(MAX) ='{"name":"jonh","address":"100 st \n city ,country"}' SELECT JSON_VALUE(@jsonString,'$.address') 输出为“100个城市、国家” 但我希望输出为“100 st\n城市、国家” 如何保留新行字符。在json中转义\: DECLARE @jsonString NVARCHAR(

如何在SQL server的JSON_值输出中保留新行字符

DECLARE @jsonString NVARCHAR(MAX) ='{"name":"jonh","address":"100 st \n city ,country"}'
SELECT JSON_VALUE(@jsonString,'$.address')
输出为“
100个城市、国家

但我希望输出为“
100 st\n城市、国家


如何保留新行字符。

在json中转义
\

DECLARE @jsonString NVARCHAR(MAX) ='{"name":"jonh","address":"100 st \\n city ,country"}'
SELECT JSON_VALUE(@jsonString,'$.address')

它被保留,只是SSMS在表中显示时将其转换为空间。 您可以通过转换为varbinary或将SSMS输出更改为text进行检查:

DECLARE @jsonString NVARCHAR(MAX) ='{"name":"jonh","address":"\n100 st \n city ,country"}'

SELECT JSON_VALUE(@jsonString,'$.address'),cast(JSON_VALUE(@jsonString,'$.address') as varbinary(100))

您可以使用来自的解决方案将它们保留在SSM中。

另一种可能的方法,使用
字符串_ESCAPE()
'json'
作为
类型
参数的值:

声明:

DECLARE @jsonString NVARCHAR(MAX) = N'{"name":"jonh","address":"100 st \n city ,country"}'
SELECT STRING_ESCAPE(JSON_VALUE(JSON_QUERY(@jsonString), '$.address'), 'json')
结果:

100 st \n city ,country