首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSON_VALUE返回包含\n作为换行符的JSON值

使用JSON_VALUE返回包含\n作为换行符的JSON值
EN

Stack Overflow用户
提问于 2021-11-16 03:51:24
回答 1查看 54关注 0票数 1

考虑Microsoft SQL Server中的以下T-SQL:

代码语言:javascript
复制
SELECT JSON_VALUE ('{"Value": "Normal Text 304\n1212\n1212\n121\na"}', '$.Value')

执行此操作时,\n将在数据中转换为ASCII10(换行符),并返回以下内容:

代码语言:javascript
复制
Normal Text 304 1212 1212 121 a

但是,我需要按如下方式返回JSON值,以便将该值注入到另一个JSON结构中。

代码语言:javascript
复制
Normal Text 304\n1212\n1212\n121\na

例如:

代码语言:javascript
复制
SELECT
    ISJSON ('{"New Value": "' +  JSON_VALUE ('{"Value": "Normal Text 304\n1212\n1212\n121\na"}', '$.Value') +'"}')

这将返回0,因为它包含ASCII码10,因此无效。

对于如何从JSON结构中获取JSON格式的字符串值以粘贴到另一个JSON结构中,我希望有什么建议?

我可以从ASCII码10转换回\n,但这不是一个理想的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2021-11-16 06:37:47

如果使用SQL Server 2017+,STRING_ESCAPE()是一个选项:

代码语言:javascript
复制
SELECT STRING_ESCAPE(
   JSON_VALUE('{"Value": "Normal Text 304\n1212\n1212\n121\na"}', '$.Value'), 
   'json'
) As EscapedJson

结果:

代码语言:javascript
复制
EscapedJson
-----------------------------------
Normal Text 304\n1212\n1212\n121\na

您可以使用JSON_MODIFY()修改现有的JSON内容。在这种情况下,正如documentation中所述,如果值的类型是NVARCHAR或VARCHAR,则JSON_MODIFY() ...escapes新值中的所有特殊字符。

代码语言:javascript
复制
SELECT JSON_MODIFY(
   '{"Key": "Normal Text"}',
   '$."New Value"',
   JSON_VALUE('{"Value": "Normal Text 304\n1212\n1212\n121\na"}', '$.Value')
) AS ModifiedJson

结果:

代码语言:javascript
复制
ModifiedJson
------------------------------------------------------------------------
{"Key": "Normal Text","New Value":"Normal Text 304\n1212\n1212\n121\na"}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69983555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档