MySQL
Extrahieren Sie Werte aus dem JSON-Typ
Suche…
Einführung
MySQL 5.7.8+ unterstützt den nativen JSON-Typ. Sie haben verschiedene Möglichkeiten, Json-Objekte zu erstellen, Sie können jedoch auch auf verschiedene Arten auf Mitglieder zugreifen und sie lesen.
Die Hauptfunktion ist JSON_EXTRACT
, daher sind ->
und ->>
Operatoren freundlicher.
Syntax
- JSON_EXTRACT (json_doc, Pfad [, ...])
- JSON_EXTRACT (json_doc, Pfad)
- JSON_EXTRACT (json_doc, Pfad1, Pfad2)
Parameter
Parameter | Beschreibung |
---|---|
json_doc | gültiges JSON-Dokument |
Pfad | Mitgliederpfad |
Bemerkungen
Erwähnt in MySQL 5.7 Referenzhandbuch
- Mehrere übereinstimmende Werte nach Pfadargument (en)
Wenn es möglich ist, dass diese Argumente mehrere Werte zurückgeben, werden die übereinstimmenden Werte als Array automatisch in der Reihenfolge der Pfade, in denen sie erzeugt wurden, als Array deklariert. Andernfalls ist der Rückgabewert der einzelne übereinstimmende Wert.
-
NULL
Ergebnis wenn:- Jeder Kamerad ist NULL
- Pfad nicht übereinstimmend
Gibt NULL zurück, wenn ein Argument NULL ist oder keine Pfade einen Wert im Dokument suchen.
Lesen Sie den JSON-Array-Wert
@Myjson-Variable als JSON-Typ erstellen ( mehr lesen ):
SET @myjson = CAST('["A","B",{"id":1,"label":"C"}]' as JSON) ;
SELECT
einige Mitglieder aus!
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-Extraktionsoperatoren
path
durch ->
oder ->>
Operatoren extrahieren, während ->>
UNQUOTED-Wert ist:
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"]
--^^^ ^^^
col->>path
ist also gleich JSON_UNQUOTE(JSON_EXTRACT(col,path))
:
Wie bei -> wird der Operator - >> in der Ausgabe von EXPLAIN immer erweitert, wie das folgende Beispiel zeigt:
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)
Lesen Sie über den Inline-Pfadauszug (+)