sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man refererar till JSON-nycklar som innehåller specialtecken när man använder OPENJSON, JSON_QUERY och JSON_VALUE (SQL-server)

Om du använder en T-SQL-funktion som OPENJSON() , JSON_QUERY() , eller JSON_VALUE() , kan du vara försiktig med alla icke-alfanumeriska tecken som kan finnas i JSON-dokumentet som du arbetar med. Speciellt om dessa specialtecken finns i nyckelnamnen och du måste referera till dessa nyckelnamn.

Du kan till exempel ha ett nyckelnamn som innehåller ett mellanslag (som "first name" ), eller ett dollartecken ($ ).

Lyckligtvis, varje gång du refererar till sådana nycklar, kan du helt enkelt omge nyckelnamnet med dubbla citattecken.

Exempel 1 – OPENJSON()

Här är ett exempel på hur man refererar till en nyckel med ett mellanslag i namnet när man använder OPENJSON() .

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

Resultat:

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

Här är ett annat exempel, den här gången har vi ett dollartecken i nyckelnamnet.

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

Resultat:

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

Exempel 2 – JSON_QUERY()

Här är ett exempel med JSON_QUERY() .

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

Resultat:

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

Och här är den med ett dollartecken.

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

Resultat:

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

Exempel 3 – JSON_VALUE()

Det här exemplet använder 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"');

Resultat:

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

Och här är den med ett dollartecken.

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

Resultat:

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

  1. Ta bort SCHEMABINDING från en användardefinierad funktion i SQL Server

  2. Snapshot-kontrollfilsfunktion med RMAN och ORA-00245

  3. Kolumnen finns inte?

  4. Fråga för att kontrollera tabellstorleken i Oracle-databasen