Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como fazer referência a chaves JSON que contêm caracteres especiais ao usar OPENJSON, JSON_QUERY e JSON_VALUE (SQL Server)


Se você estiver usando uma função T-SQL como OPENJSON() , JSON_QUERY() , ou JSON_VALUE() , você pode ter cuidado com quaisquer caracteres não alfanuméricos que possam estar no documento JSON com o qual está trabalhando. Especialmente se esses caracteres especiais estiverem nos nomes de chave e você precisar fazer referência a esses nomes de chave.

Por exemplo, você pode ter um nome de chave que contenha um espaço (como "first name" ), ou um cifrão ($ ).

Felizmente, sempre que você referenciar essas chaves, você pode simplesmente colocar o nome da chave entre aspas duplas.

Exemplo 1 – OPENJSON()


Aqui está um exemplo de referência a uma chave com um espaço em seu nome ao usar OPENJSON() .
DECLARE @json NVARCHAR(4000) = N'{
        "contact details" : {
            "client id" : 1, 
            "work phone" : "+61 987 902 029"
        }
    }';
SELECT * FROM OPENJSON(@json, '$."contact details"');

Resultado:
+------------+-----------------+--------+
| key        | value           | type   |
|------------+-----------------+--------|
| client id  | 1               | 2      |
| work phone | +61 987 902 029 | 1      |
+------------+-----------------+--------+

Aqui está outro exemplo, desta vez temos um cifrão no nome da chave.
DECLARE @json NVARCHAR(4000) = N'{
        "$ per hour" : {
            "normal rate" : 80, 
            "overtime" : 160 
        }
    }';
SELECT * FROM OPENJSON(@json, '$."$ per hour"');

Resultado:
+-------------+---------+--------+
| key         | value   | type   |
|-------------+---------+--------|
| normal rate | 80      | 2      |
| overtime    | 160     | 2      |
+-------------+---------+--------+

Exemplo 2 – JSON_QUERY()


Aqui está um exemplo usando JSON_QUERY() .
DECLARE @json NVARCHAR(4000) = N'{
        "contact details" : {
            "client id" : 1, 
            "work phone" : "+61 987 902 029"
        }
    }';
SELECT JSON_QUERY(@json, '$."contact details"');

Resultado:
+--------------------+
| (No column name)   |
|--------------------|
| {
            "client id" : 1, 
            "work phone" : "+61 987 902 029"
        }                    |
+--------------------+

E aqui está com um cifrão.
DECLARE @json NVARCHAR(4000) = N'{
        "$ per hour" : {
            "normal rate" : 80, 
            "overtime" : 160 
        }
    }';
SELECT JSON_QUERY(@json, '$."$ per hour"');

Resultado:
+--------------------+
| (No column name)   |
|--------------------|
| {
            "normal rate" : 80, 
            "overtime" : 160 
        }                    |
+--------------------+

Exemplo 3 – JSON_VALUE()


Este exemplo usa 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"');

Resultado:
+--------------------+
| (No column name)   |
|--------------------|
| +61 987 902 029    |
+--------------------+

E aqui está com um cifrão.
DECLARE @json NVARCHAR(4000) = N'{
        "$ per hour" : {
            "normal rate" : 80, 
            "overtime" : 160 
        }
    }';
SELECT JSON_VALUE(@json, '$."$ per hour"."normal rate"') AS [Normal Rate];

Resultado:
+---------------+
| Normal Rate   |
|---------------|
| 80            |
+---------------+