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



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow