MySQL
Extraire les valeurs du type JSON
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 (+)