JSON パス式 (SQL Server)

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

JSON オブジェクトのプロパティを参照するには、JSON パス式を使用します。

次の関数を呼び出すときに、パス式を指定する必要があります。

  • OPENJSON を呼び出して、JSON データのリレーショナル ビューを作成します。 詳細については、「OPENJSON (Transact-SQL)」をご覧ください。

  • JSON_VALUE を呼び出して、JSON テキストから値を抽出します。 詳細については、「JSON_VALUE (Transact-SQL)」をご覧ください。

  • JSON_QUERY を呼び出して、JSON オブジェクトまたは配列を抽出します。 詳細については、「JSON_QUERY (Transact-SQL)」を参照してください。

  • JSON_MODIFY を呼び出して、JSON 文字列内のプロパティの値を更新します。 詳細については、「JSON_MODIFY (Transact-SQL)」を参照してください。

パス式の各部

パス式には 2 つのコンポーネントがあります。

  1. 省略可能な パス モード (値は lax または strict)。

  2. パス 自体。

パス モード

必要に応じて、パス式の先頭に lax または strictキーワードを指定してパス モードを宣言します。 既定値は laxです。

  • lax モードでは、パス式にエラーが含まれている場合、関数は空の値を返します。 たとえば、値 $.name を要求するときに JSON テキストに name キーが含まれていない場合、関数は null を返しますが、エラーは発生しません。

  • strict モードでは、パス式にエラーが含まれている場合、関数でエラーが発生します。

次のクエリでは、パス式で lax モードが明示的に指定されています。

DECLARE @json NVARCHAR(MAX);
SET @json=N'{ ... }';

SELECT * FROM OPENJSON(@json, N'lax $.info');

Path

省略可能なパス モード宣言の後に、パス自体を指定します。

  • ドル記号 ($) はコンテキスト アイテムを表します。

  • プロパティのパスは、パス ステップのセットです。 パス ステップには、次の要素と演算子を含めることができます。

    • キー名。 たとえば、$.name$."first name" です。 キー名がドル記号で始まるか、キー名にスペースやドット演算子 (.) などの特殊文字が含まれている場合は、引用符で囲みます。

    • 配列の要素。 たとえば、$.product[3] のようにします。 配列は 0 から始まります。

    • ドット演算子 (.) は、オブジェクトのメンバーを示します。 たとえば、$.people[1].surname では、surnamepeople の子です。

このセクションの例では、次の JSON テキストを参照します。

{
    "people": [{
        "name": "John",
        "surname": "Doe"
    }, {
        "name": "Jane",
        "surname": null,
        "active": true
    }]
}

次の表に、パス式の例をいくつか示します。

パス式 Value
$.people[0].name John
$.people[1] { "name": "Jane", "surname": null, "active": true }
$.people[1].surname null
$ { "people": [ { "name": "John", "surname": "Doe" },
{ "name": "Jane", "surname": null, "active": true } ] }

組み込み関数が重複するパスを処理する方法

たとえば、同じ名前の 2 つのキーが同じレベルにある場合など、JSON テキストに重複するプロパティが含まれる場合、JSON_VALUE および JSON_QUERY 関数はパスに一致する最初の値のみを返します。 重複するキーが含まれる JSON オブジェクトを解析してすべての値を取得するには、次の例に示すように OPENJSON を使用します。

DECLARE @json NVARCHAR(MAX);
SET @json=N'{"person":{"info":{"name":"John", "name":"Jack"}}}';

SELECT value
  FROM OPENJSON(@json,'$.person.info');

SQL Server と Azure SQL Database の JSON の詳細情報

Microsoft ビデオ

Note

このセクションのビデオ リンクの一部は、現時点では機能しない場合があります。 Microsoft では、以前 Channel 9 上にあったコンテンツの新しいプラットフォームへの移行作業を進めています。 ビデオが新しいプラットフォームに移行されるに従ってリンクを更新します。

SQL Server と Azure SQL Database に組み込まれている JSON のサポートの視覚的な紹介は、次のビデオをご覧ください。

参照

OPENJSON (Transact-SQL)
JSON_VALUE (Transact-SQL)
JSON_QUERY (Transact-SQL)