JSON パス式 (SQL Server)JSON Path Expressions (SQL Server)

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

JSON オブジェクトのプロパティを参照するには、JSON パス式を使用します。Use JSON path expressions to reference the properties of JSON objects.

次の関数を呼び出すときに、パス式を指定する必要があります。You have to provide a path expression when you call the following functions.

  • OPENJSON を呼び出して、JSON データのリレーショナル ビューを作成します。When you call OPENJSON to create a relational view of JSON data. 詳細については、「 OPENJSON (Transact-SQL)」をご覧ください。For more info, see OPENJSON (Transact-SQL).

  • JSON_VALUE を呼び出して、JSON テキストから値を抽出します。When you call JSON_VALUE to extract a value from JSON text. 詳細については、「 JSON_VALUE (Transact-SQL)」をご覧ください。For more info, see JSON_VALUE (Transact-SQL).

  • JSON_QUERY を呼び出して、JSON オブジェクトまたは配列を抽出します。When you call JSON_QUERY to extract a JSON object or an array. 詳細については、「 JSON_QUERY (Transact-SQL)」をご覧ください。For more info, see JSON_QUERY (Transact-SQL).

  • JSON_MODIFY を呼び出して、JSON 文字列内のプロパティの値を更新します。When you call JSON_MODIFY to update the value of a property in a JSON string. 詳細については、「 JSON_MODIFY (Transact-SQL)」を参照してください。For more info, see JSON_MODIFY (Transact-SQL).

パス式の各部Parts of a path expression

パス式には 2 つのコンポーネントがあります。A path expression has two components.

  1. 省略可能な パス モード (値は lax または strict)。The optional path mode, with a value of lax or strict.

  2. パス 自体。The path itself.

Path modePath mode

必要に応じて、パス式の先頭に lax または strictキーワードを指定してパス モードを宣言します。At the beginning of the path expression, optionally declare the path mode by specifying the keyword lax or strict. 既定値は laxです。The default is lax.

  • lax モードでは、パス式にエラーが含まれている場合、関数は空の値を返します。In lax mode, the function returns empty values if the path expression contains an error. たとえば、値 $.name を要求するときに JSON テキストに name キーが含まれていない場合、関数は null を返しますが、エラーは発生しません。For example, if you request the value $.name, and the JSON text doesn't contain a name key, the function returns null, but does not raise an error.

  • strict モードでは、パス式にエラーが含まれている場合、関数でエラーが発生します。In strict mode, the function raises an error if the path expression contains an error.

次のクエリでは、パス式で lax モードが明示的に指定されています。The following query explicitly specifies lax mode in the path expression.

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

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

PathPath

省略可能なパス モード宣言の後に、パス自体を指定します。After the optional path mode declaration, specify the path itself.

  • ドル記号 ($) はコンテキスト アイテムを表します。The dollar sign ($) represents the context item.

  • プロパティのパスは、パス ステップのセットです。The property path is a set of path steps. パス ステップには、次の要素と演算子を含めることができます。Path steps can contain the following elements and operators.

    • キー名。Key names. たとえば、 $.name$."first name"For example, $.name and $."first name". キー名がドル記号で始まるか、キー名にスペースなどの特殊文字が含まれている場合は、引用符で囲みます。If the key name starts with a dollar sign or contains special characters such as spaces, surround it with quotes.

    • 配列の要素。Array elements. たとえば、$.product[3] のようにします。For example, $.product[3]. 配列は 0 から始まります。Arrays are zero-based.

    • ドット演算子 (.) は、オブジェクトのメンバーを示します。The dot operator (.) indicates a member of an object. たとえば、$.people[1].surname では、surnamepeople の子です。For example, in $.people[1].surname, surname is a child of people.

使用例Examples

このセクションの例では、次の JSON テキストを参照します。The examples in this section reference the following JSON text.

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

次の表に、パス式の例をいくつか示します。The following table shows some examples of path expressions.

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

組み込み関数が重複するパスを処理する方法How built-in functions handle duplicate paths

たとえば、同じ名前の 2 つのキーが同じレベルにある場合など、JSON テキストに重複するプロパティが含まれる場合、JSON_VALUE および JSON_QUERY 関数はパスに一致する最初の値のみを返します。If the JSON text contains duplicate properties - for example, two keys with the same name on the same level - the JSON_VALUE and JSON_QUERY functions return only the first value that matches the path. 重複するキーが含まれる JSON オブジェクトを解析してすべての値を取得するには、次の例に示すように OPENJSON を使用します。To parse a JSON object that contains duplicate keys and return all values, use OPENJSON, as shown in the following example.

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 の詳細情報Learn more about JSON in SQL Server and Azure SQL Database

Microsoft ビデオMicrosoft videos

SQL Server と Azure SQL Database に組み込まれている JSON のサポートの視覚的な紹介は、次のビデオをご覧ください。For a visual introduction to the built-in JSON support in SQL Server and Azure SQL Database, see the following videos:

参照See Also

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