簡體   English   中英

使用 JSON_VALUE 返回包含 \\n 作為換行符的 JSON 值

[英]Use of JSON_VALUE to return a JSON value containing \n as the newline character

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

SELECT JSON_VALUE ('{"Value": "Normal Text 304\n1212\n1212\n121\na"}', '$.Value')

執行此操作時, \\n將轉換為數據中的 ASCII 10(換行符),並返回以下內容:

Normal Text 304 1212 1212 121 a

但是,我需要按如下方式返回 JSON 值,以便可以將該值注入到另一個 JSON 結構中。

Normal Text 304\n1212\n1212\n121\na

例如:

SELECT
    ISJSON ('{"New Value": "' +  JSON_VALUE ('{"Value": "Normal Text 304\n1212\n1212\n121\na"}', '$.Value') +'"}')

這將返回0因為 JSON 無效,因為它包含 ASCII 代碼10

關於如何從 JSON 結構中獲取 JSON 格式的字符串值以粘貼到另一個 JSON 結構中的任何建議,我將不勝感激?

我可以將 ASCII 代碼10轉換回\\n但這不是理想的解決方案。

如果您使用 SQL Server 2017+,則STRING_ESCAPE()是一個選項:

SELECT STRING_ESCAPE(
   JSON_VALUE('{"Value": "Normal Text 304\n1212\n1212\n121\na"}', '$.Value'), 
   'json'
) As EscapedJson

結果:

EscapedJson
-----------------------------------
Normal Text 304\n1212\n1212\n121\na

您可以使用JSON_MODIFY()修改現有的 JSON 內容。 在這種情況下,如文檔中所述, JSON_MODIFY() ...如果值的類型為 NVARCHAR 或 VARCHAR ,則轉義新值中的所有特殊字符

SELECT JSON_MODIFY(
   '{"Key": "Normal Text"}',
   '$."New Value"',
   JSON_VALUE('{"Value": "Normal Text 304\n1212\n1212\n121\na"}', '$.Value')
) AS ModifiedJson

結果:

ModifiedJson
------------------------------------------------------------------------
{"Key": "Normal Text","New Value":"Normal Text 304\n1212\n1212\n121\na"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM