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 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_QUERYで識別される値が検出されないパス, テキスト全体をスキャンし、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.

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

SQL Server 2017SQL Server 2017し、 Azure SQL データベースAzure SQL Database、変数の値として使用できるパスです。In SQL Server 2017SQL Server 2017 and in Azure SQL データベースAzure SQL Database, you can provide a variable as the value of path.

JSON のパスを解析するための lax または strict モードを指定できます。The JSON path can specify lax or strict mode for parsing. 解析モードを指定しない場合は、既定値は lax モードです。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).

既定値パス'$' がします。The default value for path is '$'. 値を指定しない場合、結果としてパスJSON_QUERY 、入力を返しますです。As a result, if you don't provide a value for path, JSON_QUERY returns the input expression.

場合の形式パスが有効でない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.

解説Remarks

厳密でないモードと厳格モード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"
} 

次の表の動作を比較してJSON_QUERY厳密でないモードでは厳格モードでします。The following table compares the behavior of JSON_QUERY in lax mode and in strict mode. 省略可能なパス モードの仕様 (lax または strict) に関する詳細については、次を参照してください。 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'{「町」:「板紙」で、"郡": ある"Avon"、「国」:"England"}'N'{ "town":"Bristol", "county":"Avon", "country":"England" }' N'{「町」:「板紙」で、"郡": ある"Avon"、「国」:"England"}'N'{ "town":"Bristol", "county":"Avon", "country":"England" }' 該当なしN/a
$info.tags。$.info.tags N '[「スポーツ」、「Water ポーロ」]'N'[ "Sport", "Water polo"]' N '[「スポーツ」、「Water ポーロ」]'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.

FOR JSON と JSON_QUERY を使用します。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 形式では既にデータを含むしている場合は、ラップを使用して JSON データJSON_QUERYせず、パスパラメーター。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

次の例からの JSON フラグメントを返す方法を示しています、CustomFieldsクエリ結果内の列です。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)