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"]
  --^^^ ^^^

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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow