Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Referenzieren von JSON-Schlüsseln, die Sonderzeichen enthalten, wenn OPENJSON, JSON_QUERY und JSON_VALUE (SQL Server) verwendet werden

Wenn Sie eine T-SQL-Funktion wie OPENJSON() verwenden , JSON_QUERY() , oder JSON_VALUE() , sind Sie möglicherweise vorsichtig bei nicht alphanumerischen Zeichen, die möglicherweise in dem JSON-Dokument enthalten sind, mit dem Sie arbeiten. Vor allem, wenn diese Sonderzeichen in den Schlüsselnamen enthalten sind und Sie auf diese Schlüsselnamen verweisen müssen.

Sie könnten beispielsweise einen Schlüsselnamen haben, der ein Leerzeichen enthält (wie "first name"). ) oder ein Dollarzeichen ($ ).

Glücklicherweise können Sie jedes Mal, wenn Sie auf solche Schlüssel verweisen, den Schlüsselnamen einfach in doppelte Anführungszeichen setzen.

Beispiel 1 – OPENJSON()

Hier ist ein Beispiel für die Referenzierung eines Schlüssels mit einem Leerzeichen im Namen, wenn OPENJSON() verwendet wird .

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

Ergebnis:

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

Hier ist ein weiteres Beispiel, diesmal haben wir ein Dollarzeichen im Schlüsselnamen.

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

Ergebnis:

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

Beispiel 2 – JSON_QUERY()

Hier ist ein Beispiel mit JSON_QUERY() .

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

Ergebnis:

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

Und hier ist es mit einem Dollarzeichen.

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

Ergebnis:

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

Beispiel 3 – JSON_VALUE()

Dieses Beispiel verwendet 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"');

Ergebnis:

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

Und hier ist es mit einem Dollarzeichen.

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

Ergebnis:

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