Szukaj…


Wprowadzenie

MySQL 5.7.8+ obsługuje natywny typ JSON. Chociaż masz różne sposoby tworzenia obiektów Json, możesz także uzyskiwać dostęp do członków i czytać je na różne sposoby.

Główną funkcją jest JSON_EXTRACT , dlatego operatorzy -> i ->> są bardziej przyjaźni.

Składnia

  • JSON_EXTRACT (json_doc, ścieżka [, ...])
  • JSON_EXTRACT (json_doc, ścieżka)
  • JSON_EXTRACT (json_doc, ścieżka 1, ścieżka 2)

Parametry

Parametr Opis
json_doc ważny dokument JSON
ścieżka ścieżka członków

Uwagi

Wspomniany w Podręczniku referencyjnym MySQL 5.7

  • Wiele dopasowanych wartości według argumentów ścieżki

Jeśli możliwe jest, że te argumenty mogą zwrócić wiele wartości, dopasowane wartości są automatycznie zawijane jako tablica, w kolejności odpowiadającej ścieżkom, które je wytworzyły. W przeciwnym razie zwracana wartość to pojedyncza dopasowana wartość.

  • Wynik NULL gdy:
    • każda argumentacja jest zerowa
    • ścieżka niezgodna

Zwraca NULL, jeśli jakikolwiek argument ma wartość NULL lub żadna ścieżka nie znajduje wartości w dokumencie.

Odczytaj wartość tablicy JSON

Utwórz zmienną @myjson jako typ JSON ( czytaj więcej ):

 SET @myjson = CAST('["A","B",{"id":1,"label":"C"}]' as JSON) ;

SELECT niektórych członków!

 SELECT
   JSON_EXTRACT( @myjson , '$[1]' ) ,
   JSON_EXTRACT( @myjson , '$[*].label') ,
   JSON_EXTRACT( @myjson , '$[1].*' ) ,
   JSON_EXTRACT( @myjson , '$[2].*')
 ;
 -- result values:
 '\"B\"', '[\"C\"]', NULL, '[1, \"C\"]'
 -- visually:
 "B", ["C"], NULL, [1, "C"]

Operatory wyodrębniania JSON

Wyodrębnij path przez -> lub ->> Operatory, podczas gdy ->> jest wartością UNQUOTED:

 SELECT
   myjson_col->>'$[1]' , myjson_col->'$[1]' ,
   myjson_col->>'$[*].label' ,
   myjson_col->>'$[1].*' ,
   myjson_col->>'$[2].*'
 FROM tablename ;
  -- visuall:
     B, "B" , ["C"], NULL, [1, "C"]
  --^^^ ^^^

Więc col->>path jest równa JSON_UNQUOTE(JSON_EXTRACT(col,path)) :

Podobnie jak w przypadku ->, operator - >> jest zawsze rozwijany w wyniku EXPLAIN, jak pokazano w poniższym przykładzie:

mysql> EXPLAIN SELECT c->>'$.name' AS name   
    ->     FROM jemp WHERE g > 2\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: jemp
   partitions: NULL
         type: range
possible_keys: i
          key: i
      key_len: 5
          ref: NULL
         rows: 2
     filtered: 100.00
        Extra: Using where
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Note
   Code: 1003
Message: /* select#1 */ select
json_unquote(json_extract(`jtest`.`jemp`.`c`,'$.name')) AS `name` from
`jtest`.`jemp` where (`jtest`.`jemp`.`g` > 2)
1 row in set (0.00 sec)

Przeczytaj o wyciągu ze ścieżki wbudowanej (+)



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