OPENJSON()
などのT-SQL関数を使用している場合 、JSON_QUERY()
、またはJSON_VALUE()
、操作しているJSONドキュメントに含まれている可能性のある英数字以外の文字に注意する必要があります。特に、これらの特殊文字がキー名に含まれていて、それらのキー名を参照する必要がある場合。
たとえば、スペースを含むキー名を設定できます("first name"
など)。 )、またはドル記号($
。
幸い、そのようなキーを参照するときはいつでも、キー名を二重引用符で囲むことができます。
例1– OPENJSON()
OPENJSON()
を使用するときに、名前にスペースが含まれるキーを参照する例を次に示します。 。
DECLARE @json NVARCHAR(4000) = N'{
"contact details" : {
"client id" : 1,
"work phone" : "+61 987 902 029"
}
}';
SELECT * FROM OPENJSON(@json, '$."contact details"');
結果:
+------------+-----------------+--------+ | key | value | type | |------------+-----------------+--------| | client id | 1 | 2 | | work phone | +61 987 902 029 | 1 | +------------+-----------------+--------+
別の例を次に示します。今回は、キー名にドル記号があります。
DECLARE @json NVARCHAR(4000) = N'{
"$ per hour" : {
"normal rate" : 80,
"overtime" : 160
}
}';
SELECT * FROM OPENJSON(@json, '$."$ per hour"');
結果:
+-------------+---------+--------+ | key | value | type | |-------------+---------+--------| | normal rate | 80 | 2 | | overtime | 160 | 2 | +-------------+---------+--------+
例2– JSON_QUERY()
JSON_QUERY()
を使用した例を次に示します。 。
DECLARE @json NVARCHAR(4000) = N'{
"contact details" : {
"client id" : 1,
"work phone" : "+61 987 902 029"
}
}';
SELECT JSON_QUERY(@json, '$."contact details"');
結果:
+--------------------+ | (No column name) | |--------------------| | { "client id" : 1, "work phone" : "+61 987 902 029" } | +--------------------+
そして、ここにドル記号が付いています。
DECLARE @json NVARCHAR(4000) = N'{
"$ per hour" : {
"normal rate" : 80,
"overtime" : 160
}
}';
SELECT JSON_QUERY(@json, '$."$ per hour"');
結果:
+--------------------+ | (No column name) | |--------------------| | { "normal rate" : 80, "overtime" : 160 } | +--------------------+
例3– JSON_VALUE()
この例では、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"');
結果:
+--------------------+ | (No column name) | |--------------------| | +61 987 902 029 | +--------------------+
そして、ここにドル記号が付いています。
DECLARE @json NVARCHAR(4000) = N'{
"$ per hour" : {
"normal rate" : 80,
"overtime" : 160
}
}';
SELECT JSON_VALUE(@json, '$."$ per hour"."normal rate"') AS [Normal Rate];
結果:
+---------------+ | Normal Rate | |---------------| | 80 | +---------------+