MySQL
Haal waarden uit het JSON-type
Zoeken…
Invoering
MySQL 5.7.8+ ondersteunt native JSON-type. Hoewel u verschillende manieren hebt om json-objecten te maken, kunt u leden op verschillende manieren openen en lezen.
De hoofdfunctie is JSON_EXTRACT
, dus zijn operatoren ->
en ->>
vriendelijker.
Syntaxis
- JSON_EXTRACT (json_doc, pad [...])
- JSON_EXTRACT (json_doc, weg)
- JSON_EXTRACT (json_doc, pad1, path2)
parameters
Parameter | Beschrijving |
---|---|
json_doc | geldig JSON-document |
pad | leden pad |
Opmerkingen
Vermeld in MySQL 5.7 Referentiehandleiding
- Meerdere overeenkomende waarden per padargument (en)
Als het mogelijk is dat die argumenten meerdere waarden kunnen retourneren, worden de overeenkomende waarden automatisch als een array ingepakt, in de volgorde die overeenkomt met de paden die ze hebben voortgebracht. Anders is de retourwaarde de enkelvoudige waarde.
-
NULL
Resultaat wanneer:- elke argemunt is NULL
- pad komt niet overeen
Retourneert NULL als een argument NULL is of als geen paden een waarde in het document zoeken.
Lees JSON Array-waarde
Maak @myjson-variabele aan als JSON-type ( lees meer ):
SET @myjson = CAST('["A","B",{"id":1,"label":"C"}]' as JSON) ;
SELECT
enkele leden!
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"]
JSON Operators extraheren
path
extraheren door ->
of ->>
Operators, terwijl ->>
ONGECONTROLEERDE waarde is:
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"]
--^^^ ^^^
Dus col->>path
is gelijk aan JSON_UNQUOTE(JSON_EXTRACT(col,path))
:
Net als bij -> wordt de operator - >> altijd uitgebreid in de uitvoer van EXPLAIN, zoals het volgende voorbeeld laat zien:
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)
Lees meer over inline path extract (+)