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!
この記事は私のブログから抜粋したものです。