ホームページ  >  記事  >  データベース  >  SQL Server (T-SQL) で JSON キーの名前を変更するにはどうすればよいですか?

SQL Server (T-SQL) で JSON キーの名前を変更するにはどうすればよいですか?

藏色散人
藏色散人オリジナル
2019-04-03 13:52:102612ブラウズ

SQL Server で JSON_MODIFY() 関数を使用して JSON ドキュメントを変更している場合は、key/value の value を変更することに慣れているかもしれません。 属性の一部。しかし、key 部分も変更できることをご存知ですか?

SQL Server (T-SQL) で JSON キーの名前を変更するにはどうすればよいですか?

これを行うコツは、値を新しいキーにコピーしてから削除することです。古い鍵。

これが私が言いたいことの基本的な例です。

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Name":"Homer"}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Handle', JSON_VALUE(@data,'$.Name')),
  '$.Name',
  NULL
 )
-- Print the new JSON
PRINT @data

結果:

{"Name":"Homer"}
{"Handle":"Homer"}

これにより、元のキー/値のペアが出力され、その後に新しいキー/値のペアが出力されます。

キーの「名前を変更した」と言えますが、実際には新しいキーを作成し、既存の値をその新しいキーにコピーし、古いキーを NULL に設定して削除しただけです。

この例では、JSON_VALUE() 関数を使用して値を抽出します。

Number

データを新しいキーにコピーするときは注意が必要です。デフォルトでは、SQL Server は二重引用符で囲みます。これはあなたが望んでいることかもしれませんし、そうでないかもしれません。

ただし、数値をコピーする場合は、数値のまま (つまり、二重引用符なしで) そのままにしておく必要があるでしょう。この場合、CAST() 関数を使用して数値データ型に変換する必要があります。例を次に示します。

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Residents":768}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Population', CAST(JSON_VALUE(@data,'$.Residents') AS int)),
  '$.Residents',
  NULL
 )
-- Print the new JSON
PRINT @data

結果:

{"Residents":768}
{"Population":768}

つまり、結果は数値になります。

この例から CAST() 関数を削除すると、次の結果が得られます:

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Residents": 768}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Population', JSON_VALUE(@data,'$.Residents')),
  '$.Residents',
  NULL
 )
-- Print the new JSON
PRINT @data

結果:

{"Residents": 768}
{"Population":"768"}

Thereforeこの場合、キーの名前を変更しただけでなく、(JSON) データ型も数値から文字列に変更しました。

、JSON は異なる数値タイプを区別しません。数値型は数値の 1 つだけです。

key キーとスペース

この例では、既存のキーの名前をスペースを含む新しいキーに変更しました (2 つの単語で構成されています)スペースで区切ります)。

新しいキーにはスペースが含まれているため、キーを二重引用符で囲む必要があります。これを行わないとエラーが発生します。

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Population":68}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$."Average IQ"', CAST(JSON_VALUE(@data,'$.Population') AS int)),
  '$.Population',
  NULL
 )
-- Print the new JSON
PRINT @data

結果:

{"Population":68}
{"Average IQ":68}

ネストされたプロパティ

プロパティがネストされている場合、問題はありません。ドット表記を使用して参照してください。

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
PRINT @data
SET @data=
  JSON_MODIFY(
    JSON_MODIFY(@data,'$.Suspect.Qualifications', JSON_QUERY(@data,'$.Suspect.Hobbies')),
   '$.Suspect.Hobbies',
   NULL
  )
PRINT @data

結果:

{ 
"Suspect": { 
"Name": "Homer Simpson", 
"Hobbies": ["Eating", "Sleeping", "Base Jumping"] 
}
}
{ 
"Suspect": { 
"Name": "Homer Simpson" 
,"Qualifications":["Eating", "Sleeping", "Base Jumping"]}
}

この例では、前の値の代わりに JSON_QUERY() 関数を使用して値を抽出していることにも気づくでしょう。例として JSON_VALUE() を使用します。

これは、この場合、配列を抽出しており、JSON_VALUE() は配列全体を抽出できないためです (配列から抽出できるのはスカラー値のみです)。一方、JSON_QUERY() 関数はオブジェクトと配列を抽出しますが、スカラー値は抽出しません。

関連する推奨事項: 「SQL チュートリアル 」「MySQL チュートリアル

以上がSQL Server (T-SQL) で JSON キーの名前を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。