Jeśli używasz funkcji T-SQL, takiej jak OPENJSON() , JSON_QUERY() lub JSON_VALUE() , możesz uważać na wszelkie znaki niealfanumeryczne, które mogą znajdować się w dokumencie JSON, z którym pracujesz. Zwłaszcza jeśli te znaki specjalne znajdują się w nazwach klawiszy i musisz się do nich odwoływać.
Na przykład możesz mieć nazwę klucza zawierającą spację (np. "first name" ) lub znak dolara ($ ).
Na szczęście za każdym razem, gdy odwołujesz się do takich klawiszy, możesz po prostu otoczyć nazwę klawisza podwójnymi cudzysłowami.
Przykład 1 – OPENJSON()
Oto przykład odwoływania się do klucza ze spacją w jego nazwie przy użyciu OPENJSON() .
DECLARE @json NVARCHAR(4000) = N'{
"contact details" : {
"client id" : 1,
"work phone" : "+61 987 902 029"
}
}';
SELECT * FROM OPENJSON(@json, '$."contact details"'); Wynik:
+------------+-----------------+--------+ | key | value | type | |------------+-----------------+--------| | client id | 1 | 2 | | work phone | +61 987 902 029 | 1 | +------------+-----------------+--------+
Oto kolejny przykład, tym razem mamy znak dolara w nazwie klucza.
DECLARE @json NVARCHAR(4000) = N'{
"$ per hour" : {
"normal rate" : 80,
"overtime" : 160
}
}';
SELECT * FROM OPENJSON(@json, '$."$ per hour"'); Wynik:
+-------------+---------+--------+ | key | value | type | |-------------+---------+--------| | normal rate | 80 | 2 | | overtime | 160 | 2 | +-------------+---------+--------+
Przykład 2 – JSON_QUERY()
Oto przykład użycia JSON_QUERY() .
DECLARE @json NVARCHAR(4000) = N'{
"contact details" : {
"client id" : 1,
"work phone" : "+61 987 902 029"
}
}';
SELECT JSON_QUERY(@json, '$."contact details"'); Wynik:
+--------------------+
| (No column name) |
|--------------------|
| {
"client id" : 1,
"work phone" : "+61 987 902 029"
} |
+--------------------+ A tutaj jest ze znakiem dolara.
DECLARE @json NVARCHAR(4000) = N'{
"$ per hour" : {
"normal rate" : 80,
"overtime" : 160
}
}';
SELECT JSON_QUERY(@json, '$."$ per hour"'); Wynik:
+--------------------+
| (No column name) |
|--------------------|
| {
"normal rate" : 80,
"overtime" : 160
} |
+--------------------+ Przykład 3 – JSON_VALUE()
W tym przykładzie użyto 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"'); Wynik:
+--------------------+ | (No column name) | |--------------------| | +61 987 902 029 | +--------------------+
A tutaj jest ze znakiem dolara.
DECLARE @json NVARCHAR(4000) = N'{
"$ per hour" : {
"normal rate" : 80,
"overtime" : 160
}
}';
SELECT JSON_VALUE(@json, '$."$ per hour"."normal rate"') AS [Normal Rate]; Wynik:
+---------------+ | Normal Rate | |---------------| | 80 | +---------------+