it-swarm.com.de

Müssen numerische JSON-Schlüssel in Anführungszeichen gesetzt werden?

Ich habe festgestellt, dass Schlüsselwertwerte möglicherweise nicht in Anführungszeichen gesetzt werden, wenn sie in TSQL-JSON-Zeichenfolgen numerisch sind, aber es scheint, dass die Schlüsselkomponente immer in Anführungszeichen gesetzt werden muss.

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
;

Ergebnisse:

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

Das Obige zeigt dies, aber meine Fragen sind:

  1. Muss das immer so sein? (Gibt es eine Konfiguration, die dieses Verhalten überschreiben kann?)
  2. Wird dieses Verhalten von JSON oder SQL Server angegeben?
  3. Was ist der Grund für diese Entwurfsentscheidung?
  4. Wäre es ein Leistungsvorteil, wenn SQL Server nicht zitierte Zahlen automatisch als Ganzzahlen umwandelt?
5

Die Notationsdefinition JSON folgt dem folgenden Schema:

(![enter image description here

Die Definition der Zeichenfolge lautet wie folgt:

(enter image description here

Sie sehen, dass die Anführungszeichen sowohl am Anfang als auch am Ende obligatorisch sind.

Die Definition des Werts lautet wie folgt:

(enter image description here

Beachten Sie, dass Sie hier entweder eine Zeichenfolge oder eine Nummer angeben können Nummer ist:

(enter image description here

Schlussfolgerungen :

  • Schlüssel muss haben sowohl am Anfang als auch am Ende Anführungszeichen.
  • Anführungszeichen können am Werteende vermieden werden, wenn Sie Zahlen angeben.

Ich kann nicht antworten, warum JSON dieses spezielle Schema übernommen hat, und eine Antwort hier könnte meinungsbasiert sein.

SQL Server erhält immer eine Leistungssteigerung, wenn Ganzzahlen über Zeichenfolgendatentypen (wie VARCHAR oder NVARCHAR) behandelt werden, da sie schneller zu verarbeiten und zu vergleichen sind. Stellen Sie jedoch sicher, dass der Datentyp tatsächlich a ist numerischer Typ und keine als Zeichenfolge gespeicherte Zahl.

5
EzLo