web-dev-qa-db-ja.com

数値JSONキーは引用符で囲む必要がありますか?

TSQL JSON文字列の数値の場合、Key-Value値は引用符で囲まれていない可能性がありますが、キーコンポーネントはalwaysを引用符で囲む必要があるようです。

select 1, isjson(''), 'empty string' union
select 2, isjson('{}'), 'empty braces' union
select 3, isjson('{1:2}'), 'unquoted both, numerals both' union
select 4, isjson('{1:"2"}'), 'unquoted key, numerals both' union
select 5, isjson('{"1":2}'), 'unquoted value, numerals both' union
select 6, isjson('{"1":"2"}'), 'quoted both, numerals both' union
select 7, isjson('{a:b}'), 'unquoted both, alpha both' union
select 8, isjson('{a:"b"}'), 'unquoted key, alpha both' union
select 9, isjson('{"a":b}'), 'unquoted value, alpha both' union
select 10, isjson('{"a":"b"}'), 'quoted both, alpha both'
order by 1
;

結果:

1   0   empty string
2   1   empty braces
3   0   unquoted both, numerals both
4   0   unquoted key, numerals both
5   1   unquoted value, numerals both
6   1   quoted both, numerals both
7   0   unquoted both, alpha both
8   0   unquoted key, alpha both
9   0   unquoted value, alpha both
10  1   quoted both, alpha both

上記はこれを示していますが、私の質問は:

  1. これは常にそうでなければなりませんか? (この動作を上書きできる構成はありますか?)
  2. この動作はJSONまたはSQL Serverによって指定されていますか?
  3. この設計決定の背後にある根拠は何ですか?
  4. SQL Serverが引用符で囲まれていない数値を整数として自動的にキャストする場合、パフォーマンス上の利点はありますか?
5

[〜#〜] json [〜#〜] 表記定義は次のスキーマに従います。

![enter image description here

stringの定義は次のとおりです。

enter image description here

引用符は最初と最後の両方で必須であることがわかります。

valueの定義は次のとおりです。

enter image description here

ここではstringまたはnumberを指定できることに注意してください。numberは次のとおりです。

enter image description here

結論

  • キーmustは、最初と最後の両方に引用符があります。
  • 数値を指定する場合、値の終わりで引用符を回避できます。

JSONがこの特定のスキーマを採用した理由に答えることはできず、ここでの応答は意見に基づく可能性があります。

SQL Serverは、文字列データ型(VARCHARNVARCHARなど)を介して整数を処理する場合、常にパフォーマンスが向上します。これは、SQL Serverがより高速に操作および比較できるためですが、データ型が実際に数値型であり、文字列として保存された数値ではありません。

5
EzLo