Ricerca…


introduzione

MySQL 5.7.8+ supporta il tipo JSON nativo. Mentre hai diversi modi per creare oggetti JSON, puoi anche accedere e leggere i membri in modi diversi.

La funzione principale è JSON_EXTRACT , quindi gli operatori -> e ->> sono più amichevoli.

Sintassi

  • JSON_EXTRACT (json_doc, percorso [...])
  • JSON_EXTRACT (json_doc, percorso)
  • JSON_EXTRACT (json_doc, path1, path2)

Parametri

Parametro Descrizione
json_doc documento JSON valido
sentiero percorso dei membri

Osservazioni

Citato in MySQL 5.7 Manuale di riferimento

  • Più valori abbinati per argomento / i di percorso

Se è possibile che tali argomenti possano restituire più valori, i valori corrispondenti vengono autowrapped come array, nell'ordine corrispondente ai percorsi che li hanno prodotti. Altrimenti, il valore di ritorno è il singolo valore corrispondente.

  • NULL Risultato quando:
    • qualsiasi argomento è NULL
    • percorso non corrispondente

Restituisce NULL se qualsiasi argomento è NULL o nessun percorso trova un valore nel documento.

Leggi il valore dell'array JSON

Crea la variabile @myjson come tipo JSON ( leggi di più ):

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

SELECT alcuni membri!

 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"]

Operatori di estrazione JSON

Estrai path da -> o ->> Operatori, mentre ->> è UNQUOTED valore:

 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"]
  --^^^ ^^^

Quindi col->>path è uguale a JSON_UNQUOTE(JSON_EXTRACT(col,path)) :

Come con ->, l'operatore - >> è sempre espanso nell'output di EXPLAIN, come dimostra il seguente esempio:

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)

Leggi l'estratto del percorso inline (+)



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow