JSON_QUERY (TRANSACT-SQL)JSON_QUERY (Transact-SQL)

このトピックの対象: ○SQL Server (2016 以降)○Azure SQL Database×Azure SQL Data Warehouse ×Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

オブジェクトまたは配列を JSON 文字列から抽出します。Extracts an object or an array from a JSON string.

オブジェクトまたは配列ではなく JSON 文字列からスカラー値を抽出する場合は、「JSON_VALUE (TRANSACT-SQL)」を参照してください。To extract a scalar value from a JSON string instead of an object or an array, see JSON_VALUE (Transact-SQL). JSON_VALUEJSON_QUERY の違いについては、「JSON_VALUE と JSON_QUERY を比較する」を参照してください。For info about the differences between JSON_VALUE and JSON_QUERY, see Compare JSON_VALUE and JSON_QUERY.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

JSON_QUERY ( expression [ , path ] )  

引数Arguments

式 (expression)expression
式。An expression. 通常、変数またはを JSON テキストを含む列の名前。Typically the name of a variable or a column that contains JSON text.

JSON_QUERY が、path によって識別される値を検出する前に expression で無効な JSON を検出した場合、関数はエラーを返します。If JSON_QUERY finds JSON that is not valid in expression before it finds the value identified by path, the function returns an error. JSON_QUERYpath によって識別される値を検出できない場合、テキスト全体がスキャンされ、expression のどこかで無効な JSON を検出した場合はエラーを返します。If JSON_QUERY doesn't find the value identified by path, it scans the entire text and returns an error if it finds JSON that is not valid anywhere in expression.

pathpath
オブジェクトまたは抽出先の配列を指定する JSON のパス。A JSON path that specifies the object or the array to extract.

SQL Server 2017 (14.x)SQL Server 2017 (14.x)Azure SQL データベースAzure SQL Database では、path の値として変数を指定できます。In SQL Server 2017 (14.x)SQL Server 2017 (14.x) and in Azure SQL データベースAzure SQL Database, you can provide a variable as the value of path.

JSON のパスを解析するための厳密でないまたは strict モードを指定できます。The JSON path can specify lax or strict mode for parsing. 解析モードの指定がない場合は、厳密でないモードが既定で指定されます。If you don't specify the parsing mode, lax mode is the default. 詳細については、「JSON パス式 (SQL Server)」を参照してください。For more info, see JSON Path Expressions (SQL Server).

path の既定値は '$' です。The default value for path is '$'. この結果、path の値を指定しない場合、JSON_QUERY は、入力された expression を返します。As a result, if you don't provide a value for path, JSON_QUERY returns the input expression.

path の書式が有効でない場合、JSON_QUERY はエラーを返します。If the format of path isn't valid, JSON_QUERY returns an error.

戻り値Return Value

型 nvarchar (max) の JSON フラグメントを返します。Returns a JSON fragment of type nvarchar(max). 返される値の照合順序は、入力された式の照合順序と同じです。The collation of the returned value is the same as the collation of the input expression.

場合は、値は、オブジェクトまたは配列には。If the value is not an object or an array:

  • 厳密でないモードで JSON_QUERY は null を返します。In lax mode, JSON_QUERY returns null.

  • 厳格モードで JSON_QUERY はエラーを返します。In strict mode, JSON_QUERY returns an error.

RemarksRemarks

厳密でないモードと厳格モードLax mode and strict mode

次の JSON テキストを考慮してください。Consider the following JSON text:

{
    "info": {
        "type": 1,
        "address": {
            "town": "Bristol",
            "county": "Avon",
            "country": "England"
        },
        "tags": ["Sport", "Water polo"]
    },
    "type": "Basic"
} 

次の表は、lax モードと strict モードでの JSON_MODIFY の動作を比較します。The following table compares the behavior of JSON_QUERY in lax mode and in strict mode. 省略可能なパス モード (厳密でない、または厳格) の指定について詳しくは、「JSON パス式 (SQL Server)」を参照してください。For more info about the optional path mode specification (lax or strict), see JSON Path Expressions (SQL Server).

[パス]Path 厳密でないモードでの戻り値Return value in lax mode 厳格モードでの戻り値Return value in strict mode 詳細More info
$ 全体の JSON テキストを返しますReturns the entire JSON text. 全体の JSON テキストを返しますReturns the entire JSON text. 該当なしN/a
$info.type。$.info.type NULLNULL [エラー]Error オブジェクトまたは配列されません。Not an object or array.

代わりに JSON_VALUE を使用します。Use JSON_VALUE instead.
$.info.address.town$.info.address.town NULLNULL [エラー]Error オブジェクトまたは配列されません。Not an object or array.

代わりに JSON_VALUE を使用します。Use JSON_VALUE instead.
$ .info。"アドレス$.info."address" N'{ "town":"Bristol", "county":"Avon", "country":"England" }'N'{ "town":"Bristol", "county":"Avon", "country":"England" }' N'{ "town":"Bristol", "county":"Avon", "country":"England" }'N'{ "town":"Bristol", "county":"Avon", "country":"England" }' 該当なしN/a
$info.tags。$.info.tags N'[ "Sport", "Water polo"]'N'[ "Sport", "Water polo"]' N'[ "Sport", "Water polo"]'N'[ "Sport", "Water polo"]' 該当なしN/a
$info.type[0]。$.info.type[0] NULLNULL [エラー]Error 配列ではありません。Not an array.
$info.none。$.info.none NULLNULL [エラー]Error プロパティが存在しません。Property does not exist.

JSON_QUERY と FOR JSON の使用Using JSON_QUERY with FOR JSON

JSON_QUERY は、有効な JSON フラグメントを返します。JSON_QUERY returns a valid JSON fragment. その結果、FOR JSON は、JSON_QUERY 戻り値内の特殊文字をエスケープしません。As a result, FOR JSON doesn't escape special characters in the JSON_QUERY return value.

FOR JSON を使用して結果を返すときに (列内または式の結果として) 既に JSON 形式になっているデータを含める場合は、path パラメーターなしで JSON_QUERY を使用して JSON データをラップします。If you're returning results with FOR JSON, and you're including data that's already in JSON format (in a column or as the result of an expression), wrap the JSON data with JSON_QUERY without the path parameter.

使用例Examples

例 1Example 1

次の例では、クエリの結果内の CustomFields 列から JSON フラグメントを返す方法を示します。The following example shows how to return a JSON fragment from a CustomFields column in query results.

SELECT PersonID,FullName,
 JSON_QUERY(CustomFields,'$.OtherLanguages') AS Languages
FROM Application.People

例 2Example 2

次の例では、JSON の FOR 句の出力に JSON フラグメントを含める方法を示します。The following example shows how to include JSON fragments in the output of the FOR JSON clause.

SELECT StockItemID, StockItemName,
         JSON_QUERY(Tags) as Tags,
         JSON_QUERY(CONCAT('["',ValidFrom,'","',ValidTo,'"]')) ValidityPeriod
FROM Warehouse.StockItems
FOR JSON PATH

参照See Also

JSON パス式 (SQL Server) JSON Path Expressions (SQL Server)
JSON データ (SQL Server)JSON Data (SQL Server)