Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment référencer des clés JSON contenant des caractères spéciaux lors de l'utilisation de OPENJSON, JSON_QUERY et JSON_VALUE (SQL Server)

Si vous utilisez une fonction T-SQL telle que OPENJSON() , JSON_QUERY() , ou JSON_VALUE() , vous pourriez vous méfier des caractères non alphanumériques qui pourraient se trouver dans le document JSON avec lequel vous travaillez. Surtout si ces caractères spéciaux se trouvent dans les noms de clé et que vous devez faire référence à ces noms de clé.

Par exemple, vous pourriez avoir un nom de clé qui contient un espace (comme "first name" ), ou un signe dollar ($ ).

Heureusement, chaque fois que vous faites référence à de telles clés, vous pouvez simplement entourer le nom de la clé de guillemets doubles.

Exemple 1 – OPENJSON()

Voici un exemple de référencement d'une clé avec un espace dans son nom lors de l'utilisation de OPENJSON() .

DECLARE @json NVARCHAR(4000) = N'{
        "contact details" : {
            "client id" : 1, 
            "work phone" : "+61 987 902 029"
        }
    }';
SELECT * FROM OPENJSON(@json, '$."contact details"');

Résultat :

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

Voici un autre exemple, cette fois nous avons un signe dollar dans le nom de la clé.

DECLARE @json NVARCHAR(4000) = N'{
        "$ per hour" : {
            "normal rate" : 80, 
            "overtime" : 160 
        }
    }';
SELECT * FROM OPENJSON(@json, '$."$ per hour"');

Résultat :

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

Exemple 2 – JSON_QUERY()

Voici un exemple utilisant JSON_QUERY() .

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

Résultat :

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

Et le voici avec un signe dollar.

DECLARE @json NVARCHAR(4000) = N'{
        "$ per hour" : {
            "normal rate" : 80, 
            "overtime" : 160 
        }
    }';
SELECT JSON_QUERY(@json, '$."$ per hour"');

Résultat :

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

Exemple 3 – JSON_VALUE()

Cet exemple utilise 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"');

Résultat :

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

Et le voici avec un signe dollar.

DECLARE @json NVARCHAR(4000) = N'{
        "$ per hour" : {
            "normal rate" : 80, 
            "overtime" : 160 
        }
    }';
SELECT JSON_VALUE(@json, '$."$ per hour"."normal rate"') AS [Normal Rate];

Résultat :

+---------------+
| Normal Rate   |
|---------------|
| 80            |
+---------------+