Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come fare riferimento a chiavi JSON che contengono caratteri speciali quando si usa OPENJSON, JSON_QUERY e JSON_VALUE (SQL Server)

Se stai usando una funzione T-SQL come OPENJSON() , JSON_QUERY() o JSON_VALUE() , potresti diffidare di eventuali caratteri non alfanumerici che potrebbero trovarsi nel documento JSON con cui stai lavorando. Soprattutto se quei caratteri speciali sono nei nomi delle chiavi e devi fare riferimento a quei nomi delle chiavi.

Ad esempio, potresti avere un nome chiave che contiene uno spazio (come "first name" ) o un simbolo del dollaro ($ ).

Fortunatamente, ogni volta che fai riferimento a tali chiavi, puoi semplicemente racchiudere il nome della chiave tra virgolette doppie.

Esempio 1 – OPENJSON()

Ecco un esempio di riferimento a una chiave con uno spazio nel nome quando si utilizza OPENJSON() .

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

Risultato:

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

Ecco un altro esempio, questa volta abbiamo il simbolo del dollaro nel nome della chiave.

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

Risultato:

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

Esempio 2 – JSON_QUERY()

Ecco un esempio 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"');

Risultato:

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

Ed eccolo qui con il simbolo del dollaro.

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

Risultato:

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

Esempio 3 – JSON_VALUE()

Questo esempio utilizza 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"');

Risultato:

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

Ed eccolo qui con il simbolo del dollaro.

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

Risultato:

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