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 (+)



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow