MySQL
Extrahera värden från JSON-typ
Sök…
Introduktion
MySQL 5.7.8+ stöder inbyggd JSON-typ. Medan du har olika sätt att skapa json-objekt kan du också komma åt och läsa medlemmar på olika sätt.
JSON_EXTRACT
är JSON_EXTRACT
, därmed ->
och ->>
operatörer är mer vänliga.
Syntax
- JSON_EXTRACT (json_doc, stig [, ...])
- JSON_EXTRACT (json_doc, bana)
- JSON_EXTRACT (json_doc, sökväg1, path2)
parametrar
Parameter | Beskrivning |
---|---|
json_doc | giltigt JSON-dokument |
väg | medlemmars väg |
Anmärkningar
Nämns i MySQL 5.7 Referenshandbok
- Flera matchade värden efter sökvägsargument (er)
Om det är möjligt att dessa argument kan returnera flera värden, samlas de matchade värdena automatiskt som en matris, i den ordning som motsvarar banorna som producerade dem. Annars är returvärdet det enda matchade värdet.
-
NULL
Resultat när:- varje argemunt är NULL
- sökvägen inte matchad
Returnerar NULL om något argument är NULL eller om inga sökvägar lokaliserar ett värde i dokumentet.
Läs JSON Array-värde
Skapa @myjson-variabel som JSON-typ ( läs mer ):
SET @myjson = CAST('["A","B",{"id":1,"label":"C"}]' as JSON) ;
SELECT
några medlemmar!
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 Extract Operators
Extrahera path
med ->
eller ->>
Operatörer, medan ->>
är UNQUOTED-värde:
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"]
--^^^ ^^^
Så col->>path
är lika med JSON_UNQUOTE(JSON_EXTRACT(col,path))
:
Liksom med -> utvidgas operatören - >> alltid i utgången från EXPLAIN, vilket följande exempel visar:
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)
Läs om inline path extract (+)