Om du använder en T-SQL-funktion som OPENJSON() , JSON_QUERY() , eller JSON_VALUE() , kan du vara försiktig med alla icke-alfanumeriska tecken som kan finnas i JSON-dokumentet som du arbetar med. Speciellt om dessa specialtecken finns i nyckelnamnen och du måste referera till dessa nyckelnamn.
Du kan till exempel ha ett nyckelnamn som innehåller ett mellanslag (som "first name" ), eller ett dollartecken ($ ).
Lyckligtvis, varje gång du refererar till sådana nycklar, kan du helt enkelt omge nyckelnamnet med dubbla citattecken.
Exempel 1 – OPENJSON()
Här är ett exempel på hur man refererar till en nyckel med ett mellanslag i namnet när man använder OPENJSON() .
DECLARE @json NVARCHAR(4000) = N'{
"contact details" : {
"client id" : 1,
"work phone" : "+61 987 902 029"
}
}';
SELECT * FROM OPENJSON(@json, '$."contact details"'); Resultat:
+------------+-----------------+--------+ | key | value | type | |------------+-----------------+--------| | client id | 1 | 2 | | work phone | +61 987 902 029 | 1 | +------------+-----------------+--------+
Här är ett annat exempel, den här gången har vi ett dollartecken i nyckelnamnet.
DECLARE @json NVARCHAR(4000) = N'{
"$ per hour" : {
"normal rate" : 80,
"overtime" : 160
}
}';
SELECT * FROM OPENJSON(@json, '$."$ per hour"'); Resultat:
+-------------+---------+--------+ | key | value | type | |-------------+---------+--------| | normal rate | 80 | 2 | | overtime | 160 | 2 | +-------------+---------+--------+
Exempel 2 – JSON_QUERY()
Här är ett exempel med JSON_QUERY() .
DECLARE @json NVARCHAR(4000) = N'{
"contact details" : {
"client id" : 1,
"work phone" : "+61 987 902 029"
}
}';
SELECT JSON_QUERY(@json, '$."contact details"'); Resultat:
+--------------------+
| (No column name) |
|--------------------|
| {
"client id" : 1,
"work phone" : "+61 987 902 029"
} |
+--------------------+ Och här är den med ett dollartecken.
DECLARE @json NVARCHAR(4000) = N'{
"$ per hour" : {
"normal rate" : 80,
"overtime" : 160
}
}';
SELECT JSON_QUERY(@json, '$."$ per hour"'); Resultat:
+--------------------+
| (No column name) |
|--------------------|
| {
"normal rate" : 80,
"overtime" : 160
} |
+--------------------+ Exempel 3 – JSON_VALUE()
Det här exemplet använder JSON_VALUE() .
DECLARE @json NVARCHAR(4000) = N'{
"contact details" : {
"client id" : 1,
"work phone" : "+61 987 902 029"
}
}';
SELECT JSON_VALUE(@json, '$."contact details"."work phone"'); Resultat:
+--------------------+ | (No column name) | |--------------------| | +61 987 902 029 | +--------------------+
Och här är den med ett dollartecken.
DECLARE @json NVARCHAR(4000) = N'{
"$ per hour" : {
"normal rate" : 80,
"overtime" : 160
}
}';
SELECT JSON_VALUE(@json, '$."$ per hour"."normal rate"') AS [Normal Rate]; Resultat:
+---------------+ | Normal Rate | |---------------| | 80 | +---------------+