JSON_VALUE (TRANSACT-SQL)JSON_VALUE (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 a scalar value from a JSON string.

JSON 文字列からスカラー値ではなくオブジェクトまたは配列を抽出する場合は、「JSON_QUERY (Transact-SQL)」を参照してください。To extract an object or an array from a JSON string instead of a scalar value, see JSON_QUERY (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_VALUE ( expression , path )  

引数Arguments

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

JSON_VALUE が、path によって識別される値を検出する前に expression で無効な JSON を検出した場合、関数はエラーを返します。If JSON_VALUE finds JSON that is not valid in expression before it finds the value identified by path, the function returns an error. JSON_VALUE* が path によって識別される値を検出できない場合、テキスト全体がスキャンされ、*expression* のどこかで無効な JSON を検出した場合はエラーを返します。If \JSON_VALUE* 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 property to extract. 詳細については、「JSON パス式 (SQL Server)」を参照してください。For more info, see JSON Path Expressions (SQL Server).

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.

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

戻り値Return Value

型 nvarchar (4000) の 1 つのテキスト値を返します。Returns a single text value of type nvarchar(4000). 返される値の照合順序は、入力された式の照合順序と同じです。The collation of the returned value is the same as the collation of the input expression.

値が 4,000 文字を超える場合は。If the value is greater than 4000 characters:

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

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

    4,000 文字を超えるスカラー値を返す必要がある場合は、JSON_VALUE の代わりに OPENJSON を使用します。If you have to return scalar values greater than 4000 characters, use OPENJSON instead of JSON_VALUE. 詳細については、「 OPENJSON (Transact-SQL)」をご覧ください。For more info, see OPENJSON (Transact-SQL).

RemarksRemarks

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

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

DECLARE @jsonInfo NVARCHAR(MAX)

SET @jsonInfo=N'{  
     "info":{    
       "type":1,  
       "address":{    
         "town":"Bristol",  
         "county":"Avon",  
         "country":"England"  
       },  
       "tags":["Sport", "Water polo"]  
    },  
    "type":"Basic"  
 }'  

次の表は、厳密でないモードと厳格モードでの JSON_VALUE の動作を比較します。The following table compares the behavior of JSON_VALUE 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
$ NULLNULL [エラー]Error スカラー値ではありません。Not a scalar value.

代わりに JSON_QUERY を使用します。Use JSON_QUERY instead.
$info.type。$.info.type N '1'N'1' N '1'N'1' 該当なしN/a
$.info.address.town$.info.address.town N'Bristol'N'Bristol' N'Bristol'N'Bristol' 該当なしN/a
$ .info。"アドレス$.info."address" NULLNULL [エラー]Error スカラー値ではありません。Not a scalar value.

代わりに JSON_QUERY を使用します。Use JSON_QUERY instead.
$info.tags。$.info.tags NULLNULL [エラー]Error スカラー値ではありません。Not a scalar value.

代わりに JSON_QUERY を使用します。Use JSON_QUERY instead.
$info.type[0]。$.info.type[0] NULLNULL [エラー]Error 配列ではありません。Not an array.
$info.none。$.info.none NULLNULL [エラー]Error プロパティが存在しません。Property does not exist.

使用例Examples

例 1Example 1

次の例では、クエリの結果に JSON のプロパティの値 townstate を使用します。The following example uses the values of the JSON properties town and state in query results. JSON_VALUE がソースの照合順序を保持するため、結果の並べ替え順序が jsonInfo 列の照合順序に依存します。Since JSON_VALUE preserves the collation of the source, the sort order of the results depends on the collation of the jsonInfo column.

注意

(この例では、Person.Person という名前のテーブルが JSON テキストの jsonInfo 列を含み、またこの列が、前の厳密でないモードと厳格モードの説明で示した構造を持っていることを前提としています。(This example assumes that a table named Person.Person contains a jsonInfo column of JSON text, and that this column has the structure shown previously in the discussion of lax mode and strict mode. AdventureWorks サンプル データベースでは、Person テーブルは実は jsonInfo 列を含んでいません。)In the AdventureWorks sample database, the Person table does not in fact contain a jsonInfo column.)

SELECT FirstName, LastName,
 JSON_VALUE(jsonInfo,'$.info.address[0].town') AS Town
FROM Person.Person
WHERE JSON_VALUE(jsonInfo,'$.info.address[0].state') LIKE 'US%'
ORDER BY JSON_VALUE(jsonInfo,'$.info.address[0].town')

例 2Example 2

次の例では、ローカル変数に JSON プロパティの値 town を抽出します。The following example extracts the value of the JSON property town into a local variable.

DECLARE @jsonInfo NVARCHAR(MAX)
DECLARE @town NVARCHAR(32)

SET @jsonInfo=N'<array of address info>'

SET @town=JSON_VALUE(@jsonInfo,'$.info.address.town')

例 3Example 3

次の例では、JSON のプロパティの値に基づいて、計算列を作成します。The following example creates computed columns based on the values of JSON properties.

CREATE TABLE dbo.Store
 (
  StoreID INT IDENTITY(1,1) NOT NULL,
  Address VARCHAR(500),
  jsonContent NVARCHAR(8000),
  Longitude AS JSON_VALUE(jsonContent, '$.address[0].longitude'),
  Latitude AS JSON_VALUE(jsonContent, '$.address[0].latitude')
 )

参照See Also

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