sql >> Database >  >> RDS >> Sqlserver

Hoe te verwijzen naar JSON-sleutels die speciale tekens bevatten bij gebruik van OPENJSON, JSON_QUERY en JSON_VALUE (SQL Server)

Als u een T-SQL-functie gebruikt, zoals OPENJSON() , JSON_QUERY() , of JSON_VALUE() , bent u mogelijk op uw hoede voor niet-alfanumerieke tekens in het JSON-document waarmee u werkt. Vooral als die speciale tekens in de sleutelnamen staan, en je naar die sleutelnamen moet verwijzen.

U kunt bijvoorbeeld een sleutelnaam hebben die een spatie bevat (zoals "first name" ), of een dollarteken ($ ).

Gelukkig kunt u elke keer dat u naar dergelijke sleutels verwijst, de sleutelnaam eenvoudig tussen dubbele aanhalingstekens plaatsen.

Voorbeeld 1 – OPENJSON()

Hier is een voorbeeld van het verwijzen naar een sleutel met een spatie in de naam bij gebruik van OPENJSON() .

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

Resultaat:

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

Hier is nog een voorbeeld, deze keer hebben we een dollarteken in de sleutelnaam.

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

Resultaat:

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

Voorbeeld 2 – JSON_QUERY()

Hier is een voorbeeld met JSON_QUERY() .

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

Resultaat:

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

En hier is het met een dollarteken.

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

Resultaat:

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

Voorbeeld 3 – JSON_VALUE()

Dit voorbeeld gebruikt 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"');

Resultaat:

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

En hier is het met een dollarteken.

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

Resultaat:

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

  1. MariaDB LOCALTIMESTAMP() uitgelegd

  2. Hoe genereer ik in SQL Server een CREATE TABLE-instructie voor een bepaalde tabel?

  3. Toegang tot foutnummer bericht opzoeken

  4. Panda's schrijven dataframe naar ander postgresql-schema