次の方法で共有


FOR JSON での特殊文字のエスケープと制御文字 (SQL Server)

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics (サーバーレスの SQL プールのみ)

このトピックでは、SQL Server の FOR JSON ステートメントの SELECT 句が、JSON 出力で特殊文字をどのようにエスケープし、制御文字をどのように表すかについて説明します。

重要

この記事では、Microsoft SQL Server の JSON の組み込みサポートについて説明します。 JSON のエスケープとエンコードの全般情報については、「JSON RFC」のセクション 2.5 を参照してください。

特殊文字のエスケープ

ソース データに特殊文字が含まれる場合、次の表で示すように、FOR JSON 句は JSON 出力の特殊文字を \ でエスケープします。 このエスケープは、プロパティの名前と値の両方で行われます。

特殊文字 エスケープされた出力
引用符 (") \"
円記号 (\) \\
スラッシュ (/) \/
バックスペース \b
フォーム フィード \f
改行 \n
キャリッジ リターン \r
水平タブ \t

制御文字

ソース データに制御文字が含まれる場合、FOR JSON 句は JSON 出力の制御文字を \u<code> 形式でエンコードします。次の表をご覧ください。

制御文字 エンコードされた出力
CHAR(0) \u0000
CHAR(1) \u0001
CHAR(31) \u001f

次は、特殊文字と制御文字の両方を含むソース データの FOR JSON 出力の例です。

クエリ:

SELECT 'VALUE\    /
  "' AS [KEY\/"],
    CHAR(0) AS '0',
    CHAR(1) AS '1',
    CHAR(31) AS '31'
FOR JSON PATH;

結果:

[
    {
        "KEY\\\/\"": "VALUE\\    \/\r\n  \"",
        "0": "\u0000",
        "1": "\u0001",
        "31": "\u001f"
    }
]

次のステップ