Jak działa JSON_VALUE w języku SQL? Przykłady zastosowania

Jak działa JSON_VALUE w języku SQL? Przykłady zastosowania

Praca z danymi w formacie JSON w bazach danych SQL stała się standardem w wielu nowoczesnych aplikacjach. Jednym z kluczowych narzędzi do obsługi danych JSON w SQL Server jest funkcja JSON_VALUE. W tym artykule przyjrzymy się, jak działa JSON_VALUE w języku SQL oraz przedstawimy praktyczne przykłady zastosowania.

Co to jest JSON_VALUE?

JSON_VALUE to funkcja systemowa w SQL Server (od wersji 2016), która pozwala na wydobywanie wartości skalarnych z dokumentów JSON przechowywanych w kolumnach tekstowych. Funkcja ta zwraca wartości w formacie nvarchar, co pozwala na ich dalszą obróbkę w zapytaniach SQL.

Składnia funkcji JSON_VALUE

JSON_VALUE(źródło_JSON, ścieżka_JSON)

Parametry:

  • źródło_JSON – Kolumna lub wartość tekstowa zawierająca dane w formacie JSON.
  • ścieżka_JSON – Określa lokalizację wartości, którą chcemy wyodrębnić z dokumentu JSON.

Ścieżka JSON używa standardowej notacji dolara ($) jako punktu początkowego i może zawierać nazwy pól oraz indeksy w tablicach.

Prosty przykład użycia JSON_VALUE

Aby lepiej zrozumieć funkcję JSON_VALUE, spójrzmy na prosty przykład:

DECLARE @json NVARCHAR(MAX) = 
'{
  "id": 1,
  "nazwa": "Laptop",
  "cena": 2500
}';

SELECT 
  JSON_VALUE(@json, '$.nazwa') AS Produkt,
  JSON_VALUE(@json, '$.cena') AS Cena;

Wynik:

Produkt Cena
Laptop 2500

Jak wydobywać wartości z tablic JSON?

JSON może zawierać tablice, co wymaga użycia indeksów do pobierania konkretnych elementów. Oto przykład:

DECLARE @json NVARCHAR(MAX) = 
'{
  "produkty": [
    { "nazwa": "Laptop", "cena": 2500 },
    { "nazwa": "Smartfon", "cena": 1500 }
  ]
}';

SELECT 
  JSON_VALUE(@json, '$.produkty[0].nazwa') AS PierwszyProdukt,
  JSON_VALUE(@json, '$.produkty[1].cena') AS CenaDrugiegoProduktu;

Wynik:

PierwszyProdukt CenaDrugiegoProduktu
Laptop 1500

Ograniczenia funkcji JSON_VALUE

Choć JSON_VALUE jest niezwykle użyteczne, ma kilka istotnych ograniczeń:

  1. Może zwracać tylko wartości skalarne (tekst, liczby, wartości logiczne).
  2. Nie może zwrócić całej tablicy JSON – do tego służy JSON_QUERY.
  3. Jeśli ścieżka JSON jest niepoprawna lub wartość nie istnieje, zwraca NULL.
  4. Nie obsługuje dynamicznych ścieżek JSON – muszą być one podane jawnie.

JSON_VALUE w praktyce – zapytania do tabeli

Załóżmy, że mamy tabelę Zamówienia, w której kolumna DaneJSON przechowuje dane o zamówieniach w formacie JSON:

CREATE TABLE Zamówienia (
    Id INT PRIMARY KEY,
    DaneJSON NVARCHAR(MAX)
);

INSERT INTO Zamówienia (Id, DaneJSON)
VALUES 
(1, '{ "klient": "Jan Nowak", "wartosc": 300 }'),
(2, '{ "klient": "Anna Kowalska", "wartosc": 450 }');

Teraz możemy wydobyć konkretne wartości dla każdego zamówienia:

SELECT 
    Id,
    JSON_VALUE(DaneJSON, '$.klient') AS Klient,
    JSON_VALUE(DaneJSON, '$.wartosc') AS WartoscZamowienia
FROM Zamówienia;

Wynik:

Id Klient WartoscZamowienia
1 Jan Nowak 300
2 Anna Kowalska 450

Podsumowanie

Funkcja JSON_VALUE w języku SQL to potężne narzędzie umożliwiające wydobywanie wartości skalarne z dokumentów JSON. Dzięki niej możemy wygodnie analizować i przekształcać dane JSON zapisane w bazie danych SQL Server. Warto jednak pamiętać o jej ograniczeniach i stosować ją w odpowiednich scenariuszach.

 

Inny ciekawy artykuł:

Jak działa JSON_EXTRACT w języku SQL? Przykłady zastosowania

KajoDataSpace