Udostępnij za pomocą


Wyrażenia ścieżki JSON w aparacie bazy danych SQL

Dotyczy do: SQL Server 2016 (13.x) i późniejsze wersje Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (serverless SQL pool only)SQL database in Microsoft Fabric

Użyj wyrażeń ścieżki JSON, aby odwołać się do właściwości obiektów JSON.

Podczas wywoływania następujących funkcji musisz podać wyrażenie ścieżki.

  • Podczas wywoływania pliku OPENJSON w celu utworzenia relacyjnego widoku danych JSON.
  • Podczas wywoływania JSON_VALUE w celu wyodrębnienia wartości z tekstu JSON.
  • Podczas wywoływania JSON_QUERY w celu wyodrębnienia obiektu JSON lub tablicy.
  • Podczas wywoływania JSON_MODIFY w celu zaktualizowania wartości właściwości w ciągu JSON.

Części wyrażenia ścieżki

Wyrażenie ścieżki ma dwa składniki.

  1. Opcjonalny tryb ścieżki z wartością lax lub strict.

  2. Sama ścieżka .

Tryb ścieżki

Na początku wyrażenia ścieżki opcjonalnie zadeklaruj tryb ścieżki, określając słowo kluczowe lax lub strict. Wartość domyślna to lax.

  • W lax trybie funkcja zwraca puste wartości, jeśli wyrażenie ścieżki zawiera błąd. Jeśli na przykład żądasz wartości $.name, a tekst JSON nie zawiera name klucza, funkcja zwraca wartość null, ale nie zgłasza błędu.

  • W strict trybie funkcja zgłasza błąd, jeśli wyrażenie ścieżki zawiera błąd.

Następujące zapytanie jawnie określa lax tryb w wyrażeniu ścieżki.

DECLARE @json AS NVARCHAR (MAX);

SET @json = N'{ ... }';

SELECT *
FROM OPENJSON (@json, N'lax $.info');

Path

Po deklaracji trybu ścieżki opcjonalnej określ samą ścieżkę.

  • Znak dolara ($) reprezentuje element kontekstu.

  • Ścieżka właściwości jest zestawem kroków sekwencyjnych. Kroki ścieżki mogą zawierać następujące elementy i operatory.

    • Nazwy kluczy. Przykład: $.name i $."first name". Jeśli nazwa klucza zaczyna się od znaku dolara lub zawiera znaki specjalne, takie jak spacje lub operatory kropki(.), umieść ją cudzysłowami.

    • Elementy tablicy. Na przykład $.product[3]. Tablice są indeksowane od zera.

    • Operator kropki (.) wskazuje element członkowski obiektu. Na przykład, w $.people[1].surname, surname jest elementem podrzędnym people.

    • Obsługa wzorców wieloznacznych dla tablic oraz wyszukiwania zakresów jest również zapewniona, jeśli dane wejściowe są wartością typu JSON.

Obsługa symboli wieloznacznych i zakresów tablic

Note

Obsługa symboli wieloznacznych i zakresów tablic jest obecnie dostępna w wersji zapoznawczej i jest dostępna tylko w programie SQL Server 2025 (17.x).

Program SQL Server 2025 (17.x) rozszerza wyrażenie ścieżki ANSI SQL/JSON w celu obsługi tablicy wieloznacznej. Symbol wieloznaczny Tablica pozwala określić wszystkie elementy, zakres elementów, listę elementów lub specjalny token "last", aby wskazać ostatnią wartość w tablicy JSON. Tablice SQL/JSON używają indeksu opartego na zera. Ścieżka SQL/JSON z symbolami wieloznacznymi może być używana w JSON_QUERY, JSON_PATH_EXISTS i JSON_CONTAINS.

Funkcja JSON_VALUE obsługuje wyrażenie ścieżki SQL/JSON, ale zwracana wartość JSON_VALUE funkcji jest skalarną SQL, dlatego funkcja zawsze zwraca NULL dowolną ścieżkę SQL/JSON wskazującą obiekt lub tablicę JSON. Symbole wieloznaczne tablicy są obsługiwane tylko wtedy, gdy dane wejściowe są typem json .

Poniższa składnia pokazuje, jak można używać symboli wieloznacznych, zakresu i tokenu last specjalnego:

path[elements ]

elements ::= {
*
| number
| number to number
| last
| {number...[, number] }
}

Token last specjalny może być używany zamiast wartości liczbowej. Jeśli zostanie określony zakres, zakres musi zostać określony w kolejności rosnącej.

Przykłady niektórych prawidłowych wyrażeń ścieżki SQL/JSON:

Path Description
$[*] Wszystkie elementy
$[0] Pierwszy element
$[0 to 2] Pierwsze trzy elementy
$[last] Ostatni element
$[last, 0] Invalid
$[last, 2, 0, last] Invalid
$.creditcards[0].type Zwraca wartość właściwości typu pierwszego elementu w creditcards tablicy
$.credit_cards[*].type Zwraca wartość właściwości typu wszystkich elementów w creditcards tablicy
$.credit_cards[0, 2].type Zwraca wartość właściwości typu pierwszego i trzeciego elementu w creditcards tablicy
$.credit_cards[1 to 3].type Zwraca wartość właściwości typu dla elementów drugiego do czwartego w tablicy creditcards.
$.credit_cards[last].type Zwraca wartość właściwości typu ostatniego elementu w creditcards tablicy
$.credit_cards[last, 0].type Zwraca wartość właściwości typu ostatniego i pierwszego elementu w creditcards tablicy

Examples

Przykłady w tej sekcji odwołują się do następującego tekstu JSON.

{
    "people": [{
        "name": "John",
        "surname": "Doe"
    }, {
        "name": "Jane",
        "surname": null,
        "active": true
    }]
}

W poniższej tabeli przedstawiono kilka przykładów wyrażeń ścieżki.

Wyrażenie ścieżki Value
$.people[0].name John
$.people[1] { "name": "Jane", "surname": null, "active": true }
$.people[1].surname NULL
$ { "people": [ { "name": "John", "surname": "Doe" },{ "name": "Jane", "surname": null, "active": true } ] }
$.people[last].name ["Jane"]
$.people[0 to 1].name ["John","Jane"]
$.people[0, 1].name ["John","Jane"]

Jak wbudowane funkcje obsługują zduplikowane ścieżki

Jeśli tekst JSON zawiera zduplikowane właściwości — na przykład dwa klucze o tej samej nazwie na tym samym poziomie — funkcje JSON_VALUE i JSON_QUERY zwracają tylko pierwszą wartość zgodną ze ścieżką. Aby przeanalizować obiekt JSON zawierający zduplikowane klucze i zwrócić wszystkie wartości, użyj polecenia OPENJSON, jak pokazano w poniższym przykładzie.

DECLARE @json AS NVARCHAR (MAX);

SET @json = N'{"person":{"info":{"name":"John", "name":"Jack"}}}';

SELECT value
FROM OPENJSON (@json, '$.person.info');

Dowiedz się więcej o formacie JSON

Aby zapoznać się z wizualnym wprowadzeniem do wbudowanej obsługi kodu JSON, zobacz następujący film wideo: