JSON( J ava S クリプトO bject N otation)は、特にRESTAPIでデータを交換するための非常に人気のある標準です。最近のほとんどすべてのWebサイト、AndroidまたはiOSアプリは、サーバーとのデータ交換にこれを使用しています。 SQL Server 2016から、Microsoftはいくつかの組み込み関数を介してJSONのサポートを拡張します。このようにして、SQLServerは従来のリレーショナルデータベースのNOSQL機能をサポートします。調べてみましょう:
- ISJSON –文字列が有効なJSONであるかどうかを調べます
- JSON_VALUE –JSON文字列から値を取得します
- JSON_QUERY –JSON文字列からオブジェクトまたは配列をフェッチします
- JSON_MODIFY –更新されたJSON文字列を返します
- OPENJSON – JSONテキストを解析し、JSON入力からオブジェクトとプロパティを行と列として返します
- FOR JSON句–SQLデータをJSON形式にエクスポートします
ISJSON関数
DECLARE @json NVARCHAR(MAX); SET @json = N'{ "info":[ { "id":"1", "name":"Robert Aragon", "ssn":"489-36-8350", "credit_card":[ "4929-3813-3266-4295", "5370-4638-8881-3020" ], "address":{ "town":"Avon", "area":"New York", "zipcode":"76148" } }, { "id":"2", "name":"Thomas Conley", "ssn":"690-05-5315", "credit_card":[ "5299-1561-5689-1938" ], "address":{ "town":"Jackson Street", "area":"New York", "zipcode":"80233" } }, { "id":"3", "name":"Susan Davis", "ssn":"421-37-1396", "credit_card":[ "5293-8502-0071-3058" ], "address":{ "town":"Rock Beach", "area":"Los angeles", "zipcode":"900341" } }, { "id":"4", "name":"Christopher Diaz", "ssn":"458-02-6124", "credit_card":[ "5548-0246-6336-5664" ], "address":{ "town":"Small town", "area":"Wasshington", "zipcode":"63126" } }, { "id":"5", "name":"Rick Edwards", "ssn":"612-20-6832", "credit_card":[ "4539-5385-7425-5825" ], "address":{ "town":"Free Town", "area":"Utah", "zipcode":"97222" } }, { "id":"6", "name":"Victor Faulkner", "ssn":"300-62-3266", "credit_card":[ "4916-9766-5240-6147", "4532-4220-6922-9909", "5218-0144-2703-9266" ], "address":{ "town":"Dakota", "area":"North Dakota", "zipcode":"92104" } } ] } '; SELECT ISJSON(@json);
出力
1 -- 1 if it is a valid JSON otherwise 0
JSON_VALUE関数
この関数は、JSON文字列からスカラー値を取得するために使用されます。構文は
JSON_VALUE(expression, path)
式 JSONテキストを含む変数または列の名前であり、抽出するプロパティです。たとえば、上記のJSON文字列に対して以下のステートメントを実行すると、以下の出力が生成されます:
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
出力
5548-0246-6336-5664
JSON_VALUE関数は、タイプnvarchar(4000)の単一のテキスト値を返します。 nullを返します 指定されたパスがJSONオブジェクトに見つからない場合、または値がnvarchar(4000)を超えている場合。 「strict」を使用する 指定されたパスがJSONオブジェクトで使用できない場合、パスの前の‘キーワードはエラーをスローします。
JSON_QUERY関数
JSON_QUERY(expression [、path])関数は、JSONテキストを含む変数または列の名前と、引数として抽出するオブジェクトまたは配列を指定するJSONパスを取ります。
出力
タイプnvarchar(max)のJSONフラグメントを返します 。 JSON_VALUE関数と同様に、指定された値がオブジェクトまたは配列でない場合、nullを返します。 「strict」キーワードを使用すると、エラーがスローされます。
JSON_MODIFY関数
JSON文字列のプロパティの値を更新し、更新されたJSON文字列を返します。引数として式、パス、および新規を取ります。この関数を使用して、JSON文字列に対して以下の操作を実行できます。
- 更新
- 挿入
- 削除
- 追加
1。更新
指定されたパスの値を更新します。
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
出力
2。挿入
指定されたパスの属性が存在しない場合、JSON文字列に新しい値が追加されます。それ以外の場合は、上記の例のように既存の値を更新します。新しい属性はJSONの最後に追加されます。
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
出力
3。削除
パスにNULL値を入れると、それが削除されるだけです。
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
出力
4。追加
新しい要素は、次のように配列に追加できます:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
出力
OPENJSON関数
これは、JSONテキストを解析し、JSON入力からオブジェクトとプロパティを行と列として返すテーブル値関数です。
DECLARE @json NVARCHAR(MAX); SET @json = N'{"id":"1", "name": "Robert Aragon", "ssn": "489-36-8350", "credit_card":["4929-3813-3266-4295","5370-4638-8881-3020"], "address": {"town": "Avon", "area": "New York", "zipcode": "76148"}}'; SELECT * FROM OpenJson(@json) with ( id int '$.id', name varchar(50) '$.name', ssn varchar(50) '$.ssn', [credit_card] nvarchar(MAX) AS JSON, [address] nvarchar(MAX) AS JSON )
出力
JSON句の場合
この句は、SQLテーブルデータをJSON形式にエクスポートするためにTSQLで広く使用されています。 2つのバリエーションがあります:
- AUTO –デフォルトのJSON出力はAUTOオプションを使用して生成されます。
- PATH – JSONの構造は、PATHオプションを使用して列名またはエイリアスで変更できます
IF OBJECT_ID('Test1', 'U') IS NOT NULL DROP TABLE Test1; GO -- Create the table CREATE TABLE Test1( pk_id int not null identity(1,1), name varchar(10) default ('Mehedi') ) GO -- Populate with 3 sample data INSERT INTO Test1 default values GO 2 IF OBJECT_ID('Test2', 'U') IS NOT NULL DROP TABLE Test2; GO -- Create the table CREATE TABLE Test2( pk_id int not null identity(1,1), area varchar(10) default ('Dhanmondi'), city varchar(10) default ('Dhaka') ) GO -- Populate with 3 sample data INSERT INTO Test2 default values GO 1 -- Example of AUTO SELECT A.pk_id, A.name, (SELECT pk_id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON AUTO -- Example of PATH SELECT A.pk_id, A.name, (SELECT pk_id as id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON PATH , ROOT ('EmployeeInfo') GO
出力
結論
これはすべてSQLServerのJSONに関するものです。ハッピーTSQLing!
この記事は私のブログから抜粋したものです。