sql >> Databáze >  >> RDS >> Sqlserver

Jak odkazovat na klíče JSON, které obsahují speciální znaky při používání OPENJSON, JSON_QUERY a JSON_VALUE (SQL Server)

Pokud používáte funkci T-SQL, jako je OPENJSON() , JSON_QUERY() nebo JSON_VALUE() , můžete se mít na pozoru před jakýmikoli nealfanumerickými znaky, které mohou být v dokumentu JSON, se kterým pracujete. Zvláště pokud jsou tyto speciální znaky v názvech klíčů a musíte na tyto názvy klíčů odkazovat.

Můžete mít například název klíče, který obsahuje mezeru (jako "first name" ), nebo znak dolaru ($ ).

Naštěstí kdykoli na takové klíče odkazujete, můžete název klíče jednoduše obklopit dvojitými uvozovkami.

Příklad 1 – OPENJSON()

Zde je příklad odkazování na klíč s mezerou v názvu při použití OPENJSON() .

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

Výsledek:

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

Zde je další příklad, tentokrát máme v názvu klíče znak dolaru.

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

Výsledek:

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

Příklad 2 – JSON_QUERY()

Zde je příklad použití JSON_QUERY() .

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

Výsledek:

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

A tady je to se znakem dolaru.

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

Výsledek:

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

Příklad 3 – JSON_VALUE()

Tento příklad používá 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"');

Výsledek:

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

A tady je to se znakem dolaru.

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

Výsledek:

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

  1. Jak mohu vybrat první den v měsíci v SQL?

  2. Jak uniknout znaky <,> a &do html entit v Oracle PL/SQL

  3. Proč PostgreSQL sloučil uživatele a skupiny do rolí?

  4. Práce na Postgres-XL 9.5