Szukaj…


Uzyskaj klucz: pary wartości z tekstu JSON

Funkcja OPENJSON analizuje tekst JSON i zwraca wszystkie pary klucz: wartość na pierwszym poziomie JSON:

declare @json NVARCHAR(4000) = N'{"Name":"Joe","age":27,"skills":["C#","SQL"]}';
SELECT * FROM OPENJSON(@json);
klucz wartość rodzaj
Nazwa Joe 1
wiek 27 2)
umiejętności [„C #”, „SQL”] 4

Typ kolumny opisuje typ wartości, tj. Null (0), string (1), number (2), boolean (3), array (4) i object (5).

Przekształć tablicę JSON w zestaw wierszy

Funkcja OPENJSON analizuje kolekcję obiektów JSON i zwraca wartości z tekstu JSON jako zestaw wierszy.

declare @json nvarchar(4000) = N'[
  {"Number":"SO43659","Date":"2011-05-31T00:00:00","Customer": "MSFT","Price":59.99,"Quantity":1},
  {"Number":"SO43661","Date":"2011-06-01T00:00:00","Customer":"Nokia","Price":24.99,"Quantity":3}
]'

SELECT    * 
FROM OPENJSON (@json)
    WITH (
          Number   varchar(200),
          Date     datetime,
          Customer varchar(200),
          Quantity int
  )

W klauzuli WITH podano schemat powrotu funkcji OPENJSON. Klucze w obiektach JSON są pobierane według nazw kolumn. Jeśli jakiś klucz w JSON nie jest określony w klauzuli WITH (np. Price w tym przykładzie), zostanie zignorowany. Wartości są automatycznie konwertowane na określone typy.

Numer Data Klient Ilość
SO43659 2011-05-31T00: 00: 00 MSFT 1
SO43661 2011-06-01T00: 00: 00 Nokia 3)

Przekształć zagnieżdżone pola JSON w zestaw wierszy

Funkcja OPENJSON analizuje kolekcję obiektów JSON i zwraca wartości z tekstu JSON jako zestaw wierszy. Jeśli wartości w obiekcie wejściowym są zagnieżdżone, dodatkowy parametr odwzorowania można określić w każdej kolumnie w klauzuli WITH:

declare @json nvarchar(4000) = N'[
  {"data":{"num":"SO43659","date":"2011-05-31T00:00:00"},"info":{"customer":"MSFT","Price":59.99,"qty":1}},
  {"data":{"number":"SO43661","date":"2011-06-01T00:00:00"},"info":{"customer":"Nokia","Price":24.99,"qty":3}}
]'

SELECT    * 
FROM OPENJSON (@json)
    WITH (
          Number   varchar(200) '$.data.num',
          Date     datetime '$.data.date',
          Customer varchar(200) '$.info.customer',
          Quantity int '$.info.qty',
  )

W klauzuli WITH podano schemat powrotu funkcji OPENJSON. Po określeniu typu ścieżka do węzłów JSON, w których należy znaleźć zwracaną wartość. Klucze w obiektach JSON są pobierane przez te ścieżki. Wartości są automatycznie konwertowane na określone typy.

Numer Data Klient Ilość
SO43659 2011-05-31T00: 00: 00 MSFT 1
SO43661 2011-06-01T00: 00: 00 Nokia 3)

Wyodrębnianie wewnętrznych podobiektów JSON

OPENJSON może wyodrębniać fragmenty obiektów JSON w tekście JSON. W definicji kolumny, która odwołuje się do podobiektu JSON, ustaw typ nvarchar (max) i opcję AS JSON:

declare @json nvarchar(4000) = N'[
  {"Number":"SO43659","Date":"2011-05-31T00:00:00","info":{"customer":"MSFT","Price":59.99,"qty":1}},
  {"Number":"SO43661","Date":"2011-06-01T00:00:00","info":{"customer":"Nokia","Price":24.99,"qty":3}}
]'

SELECT    * 
FROM OPENJSON (@json)
    WITH (
          Number   varchar(200),
          Date     datetime,
          Info nvarchar(max) '$.info' AS JSON
  )

Kolumna informacyjna zostanie odwzorowana na obiekt „Info”. Wyniki będą:

Numer Data Informacje
SO43659 2011-05-31T00: 00: 00 {„klient”: „MSFT”, „Cena”: 59,99, „ilość”: 1}
SO43661 2011-06-01T00: 00: 00 {„klient”: „Nokia”, „cena”: 24,99, „ilość”: 3}

Praca z zagnieżdżonymi pod-tablicami JSON

JSON może mieć złożoną strukturę z wewnętrznymi tablicami. W tym przykładzie mamy tablicę zamówień z zagnieżdżoną pod-tablicą OrderItems.

declare @json nvarchar(4000) = N'[
  {"Number":"SO43659","Date":"2011-05-31T00:00:00",
    "Items":[{"Price":11.99,"Quantity":1},{"Price":12.99,"Quantity":5}]},
  {"Number":"SO43661","Date":"2011-06-01T00:00:00",
    "Items":[{"Price":21.99,"Quantity":3},{"Price":22.99,"Quantity":2},{"Price":23.99,"Quantity":2}]}
]'

Możemy analizować właściwości poziomu głównego za pomocą OPENJSON, który zwróci fragment tablicy elementów JAK JSON. Następnie możemy ponownie zastosować OPENJSON do tablicy Przedmioty i otworzyć wewnętrzną tabelę JSON. Stół pierwszego poziomu i stół wewnętrzny zostaną „połączone” jak w JOIN między standardowymi stołami:

SELECT    * 
FROM
    OPENJSON (@json)
    WITH (  Number varchar(200), Date datetime,
            Items nvarchar(max) AS JSON )
        CROSS APPLY 
            OPENJSON (Items)
            WITH ( Price float, Quantity int)

Wyniki:

Numer Data Przedmiotów Cena £ Ilość
SO43659 2011-05-31 00: 00: 00.000 [{„Cena”: 11,99, „Ilość”: 1}, {„Cena”: 12,99, „Ilość”: 5}] 11,99 1
SO43659 2011-05-31 00: 00: 00.000 [{„Cena”: 11,99, „Ilość”: 1}, {„Cena”: 12,99, „Ilość”: 5}] 12,99 5
SO43661 01.06.2011 00: 00: 00.000 [{„Cena”: 21,99, „Ilość”: 3}, {„Cena”: 22,99, „Ilość”: 2}, {„Cena”: 23,99, „Ilość”: 2}] 21,99 3)
SO43661 2011-06-01 00: 00: 00.000 [{„Cena”: 21,99, „Ilość”: 3}, {„Cena”: 22,99, „Ilość”: 2}, {„Cena”: 23,99, „Ilość”: 2}] 22,99 2)
SO43661 01.06.2011 00: 00: 00.000 [{„Cena”: 21,99, „Ilość”: 3}, {„Cena”: 22,99, „Ilość”: 2}, {„Cena”: 23,99, „Ilość”: 2}] 23,99 2)


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow