Recherche…


Introduction

MySQL 5.7.8+ prend en charge le type JSON natif. Bien que vous puissiez créer des objets json de différentes manières, vous pouvez également accéder aux membres et les lire de différentes manières.

La fonction principale est JSON_EXTRACT , donc -> et ->> opérateurs sont plus conviviaux.

Syntaxe

  • JSON_EXTRACT (json_doc, chemin d'accès [, ...])
  • JSON_EXTRACT (json_doc, chemin)
  • JSON_EXTRACT (json_doc, path1, path2)

Paramètres

Paramètre La description
json_doc document JSON valide
chemin chemin des membres

Remarques

Mentionné dans MySQL 5.7 Reference Manual

  • Plusieurs valeurs correspondantes par argument (s) de chemin

S'il est possible que ces arguments renvoient plusieurs valeurs, les valeurs correspondantes sont automatiquement récupérées sous la forme d'un tableau, dans l'ordre correspondant aux chemins qui les ont générés. Sinon, la valeur de retour est la seule valeur correspondante.

  • NULL Résultat lorsque:
    • n'importe quelle dispute est NULL
    • chemin non assorti

Retourne NULL si un argument est NULL ou si aucun chemin ne recherche une valeur dans le document.

Lire la valeur du tableau JSON

Créez la variable @myjson en tant que type JSON (en savoir plus ):

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

SELECT des membres!

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

Opérateurs d'extraction JSON

Extraire le path par -> ou ->> Opérateurs, alors que ->> est la valeur 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"]
  --^^^ ^^^

So col->>path est égal à JSON_UNQUOTE(JSON_EXTRACT(col,path)) :

Comme avec ->, l'opérateur - >> est toujours développé dans la sortie de EXPLAIN, comme le montre l'exemple suivant:

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)

Lisez à propos de l' extrait de chemin en ligne (+)



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow