Mysql
 sql >> Baza danych >  >> RDS >> Mysql

JSON_VALUE() w MySQL

W MySQL JSON_VALUE() funkcja wyodrębnia wartość z dokumentu JSON w określonej ścieżce.

Funkcja została wprowadzona w MySQL 8.0.21.

Składnia

Składnia wygląda tak:

JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])

Gdzie:

on_empty:
    {NULL | ERROR | DEFAULT value} ON EMPTY

on_error:
    {NULL | ERROR | DEFAULT value} ON ERROR

Przykład

Oto prosty przykład do zademonstrowania:

SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );

Wynik:

Dog

Tablice

Oto przykład pobierania wartości z tablicy:

SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );

Wynik:

36

Tablice bazują na zerach, więc 1 zwraca drugi element (0 zwróciłby pierwszy).

Osadzone dokumenty

Oto przykład pobierania wartości z osadzonego obiektu:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details.type' 
    );

Wynik:

Dog

Typ zwrotu

Oto przykład określenia typu zwracanego:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details' RETURNING json
    );

Wynik:

{"name": "Wag", "type": "Dog"}

Jeśli nie określisz typu zwracanego, typem zwracanym jest VARCHAR(512) .

Puste wyniki

Domyślnie, jeśli żadne dane nie zostaną znalezione w określonej ścieżce, NULL jest zwracany:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score'
    );

Wynik:

NULL

Można jednak użyć następujących opcji, aby wyraźnie określić, co ma się stać, gdy w podanej ścieżce nie zostaną znalezione żadne dane:

  • NULL ON EMPTY :Funkcja zwraca NULL; to jest zachowanie domyślne.
  • DEFAULT value NA PUSTY :podana value jest zwracany. Typ wartości musi być zgodny z typem zwracanym.
  • ERROR ON EMPTY :Funkcja zgłasza błąd.

Przykład:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score' 
    DEFAULT 'Nothing found' ON EMPTY
    );

Wynik:

Nothing found

Błędy

Aby określić, co się stanie, gdy wystąpi błąd, można użyć następujących informacji:

  • NULL ON ERROR :JSON_VALUE() zwraca NULL; to jest zachowanie domyślne.
  • DEFAULT value PRZY BŁĘDZIE :To jest zwracana wartość; jego wartość musi odpowiadać wartości typu zwracanego.
  • ERROR ON ERROR :Pojawia się błąd.

Jeśli jest używany, ON EMPTY musi poprzedzać każdy ON ERROR klauzula. Określenie ich w złej kolejności skutkuje błędem składni.

Indeksy

Jak wspomniano w uwagach do wydania MySQL 8.0.21, JSON_VALUE() funkcja upraszcza tworzenie indeksów w JSON kolumny. Wywołanie JSON_VALUE(json_doc , path POWRÓT type ) jest równoważne z wywołaniem CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc) , path ) ) JAKO type ) .

Oto przykład użyty w informacjach o wydaniu:

CREATE TABLE inventory(
    items JSON,
    INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
    INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
    INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw wiele wierszy z przygotowanymi oświadczeniami PDO

  2. Jak mogę zasymulować zmienną tablicową w MySQL?

  3. Błąd krytyczny:wywołanie funkcji członkowskiej bind_param() na wartości logicznej

  4. Dodaj sortowanie stronicowania i wyszukiwanie za pomocą jquery datatable

  5. UnicodeEncodeError:kodek „latin-1” nie może zakodować znaku