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 つのコンポーネントがあります。
パス モード
必要に応じて、パス式の先頭に 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
では、surname
はpeople
の子です。
例
このセクションの例では、次の 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)