サーチ…


前書き

MySQL 5.7.8以降は、ネイティブJSONタイプをサポートしています。 jsonオブジェクトを作成するさまざまな方法がありますが、さまざまな方法でメンバーにアクセスしたり読むことができます。

主な機能はJSON_EXTRACT->および->>演算子はよりフレンドリーです。

構文

  • JSON_EXTRACT(json_doc、path [、...])
  • JSON_EXTRACT(json_doc、path)
  • JSON_EXTRACT(json_doc、path1、path2)

パラメーター

パラメータ説明
json_doc 有効なJSON文書
パスメンバーパス

備考

MySQL 5.7リファレンスマニュアルで言及されている

  • パス引数による複数の一致した値

それらの引数が複数の値を返す可能性がある場合、一致した値は、それらを生成したパスに対応する順序で配列としてオートラップされます。それ以外の場合、戻り値は単一の一致した値です。

  • NULL結果:
    • argemuntはNULLです
    • 一致しないパス

いずれかの引数がNULLであるか、パスがドキュメント内の値を見つけることができない場合は、NULLを返します。

JSON配列の値を読み込む

@myjson変数をJSON型として作成する(続きを読む ):

 SET @myjson = CAST('["A","B",{"id":1,"label":"C"}]' as JSON) ;

メンバーをSELECTください!

 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抽出演算子

抽出pathによって->又は->>演算子、つつ->>引用符で囲まれていない値です。

 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->>pathJSON_UNQUOTE(JSON_EXTRACT(col,path))と等しくなりJSON_UNQUOTE(JSON_EXTRACT(col,path))

- >と同様に、次の例に示すように、 - >>演算子は常にEXPLAINの出力に展開されます。

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)

インラインパス抽出(+)について読む



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow