!!!MySQL mysqlでJSONをあつかう。とりあえず、SELECTの結果をJSONで出力してみる。 !JSON_OBJECT mysql> select * from 分類; +-----------------+--------------------------+---------------------+ | 分類コード | 分類名 | UPD_TIME | +-----------------+--------------------------+---------------------+ | 001 | 分類名001 | 0000-00-00 00:00:00 | | 002 | 分類名002 | 2015-12-26 22:23:34 | | 003 | 分類名------------003 | 2015-12-27 11:24:20 | +-----------------+--------------------------+---------------------+ 3 rows in set (0.00 sec) mysql> select JSON_OBJECT("CODE",分類コード,"NAME",分類名) from 分類; +------------------------------------------------------+ | JSON_OBJECT("CODE",分類コード,"NAME",分類名) | +------------------------------------------------------+ | {"CODE": "001", "NAME": "分類名001"} | | {"CODE": "002", "NAME": "分類名002"} | | {"CODE": "003", "NAME": "分類名------------003"} | +------------------------------------------------------+ 3 rows in set (0.00 sec) mysql> !column type JSON mysql> mysql> create table `json_table` ( -> `id` bigint not null auto_increment, -> `json_column` json default null, -> primary key (`id`) -> ); Query OK, 0 rows affected (0.10 sec) mysql> !INSERT & SELECT mysql> mysql> insert into `json_table` ( json_column ) select json_object("CODE",`分類コード`,"NAME",`分類名`) from 分類; Query OK, 3 rows affected (0.09 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> mysql> mysql> select * from `json_table`; +----+-----------------------------------------------------+ | id | json_column | +----+-----------------------------------------------------+ | 1 | {"CODE": "001", "NAME": "分類名001"} | | 2 | {"CODE": "002", "NAME": "分類名002"} | | 3 | {"CODE": "003", "NAME": "分類名------------003"} | +----+-----------------------------------------------------+ 3 rows in set (0.00 sec) mysql> !!JSON関数 *JSON_EXTRACT **JSONの値を検索します。$.key名で値を探し、ない場合はNULLが返ってきます。 **ショートカット '->' : ex. json_column->'$.NAME' *JSON_UNQUOTE(JSON_EXTRACT(..)) **クオートを外す **ショートカット '->>' : ex. json_column->>'$.NAME' *JSON_SET **JSONにデータを挿入、更新します *https://hit.hateblo.jp/entry/MYSQL/8.0/JSON *https://qiita.com/yuji0602/items/a43f593ee2542c6a3bb2 !抽出 mysql> mysql> select json_extract(json_column,'$.NAME') from `json_table`; +------------------------------------+ | json_extract(json_column,'$.NAME') | +------------------------------------+ | "分類名001" | | "分類名002" | | "分類名------------003" | +------------------------------------+ 3 rows in set (0.00 sec) mysql> select json_column->'$.NAME',json_column->>'$.NAME' from `json_table`; +----------------------------+--------------------------+ | json_column->'$.NAME' | json_column->>'$.NAME' | +----------------------------+--------------------------+ | "分類名001" | 分類名001 | | "分類名002" | 分類名002 | | "分類名------------003" | 分類名------------003 | +----------------------------+--------------------------+ 3 rows in set (0.00 sec) mysql> mysql> select json_column->>'$.NAME' from `json_table` where json_column->>'$.CODE' = 1; +------------------------+ | json_column->>'$.NAME' | +------------------------+ | 分類名001 | +------------------------+ 1 row in set (0.00 sec) mysql> !更新 mysql> update `json_table` set json_column = JSON_SET(json_column,'$.NAME','新 しい分類名') where json_column->>'$.CODE' = 1; Query OK, 1 row affected (0.07 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> mysql> select * from `json_table`; +----+-----------------------------------------------------+ | id | json_column | +----+-----------------------------------------------------+ | 1 | {"CODE": "001", "NAME": "新しい分類名"} | | 2 | {"CODE": "002", "NAME": "分類名002"} | | 3 | {"CODE": "003", "NAME": "分類名------------003"} | +----+-----------------------------------------------------+ 3 rows in set (0.00 sec) mysql> !!!JSONP JSONは情報をやり取りする際のフォーマットとして 頻繁に使われるようになりました。 ただ、外部サービスと通信する際に、 AjaxでJSONをやり取りするには「クロスドメイン」という壁があります。 つまり、他ドメインに属するファイルはAjaxでは基本的に取得出来ません。 そこでJSONPの出番です。 JSONPはJSON with Paddingの略称です。Paddingは(本来は不要なものの)付け足しという意味です。 -- Wikipediaより -- JSONP(JSON with padding)とは、scriptタグを使用してクロスドメインな(異なるドメインに存在する)データを取得する仕組みのことである。HTMLのscriptタグ、JavaScript(関数)、JSONを組み合わせて実現される。 !仕組 ウェブブラウザなどに実装されている「同一生成元ポリシー」という制約により、Webページは通常、自分を生成したドメイン以外のドメインのサーバと通信することはできない。 しかし、HTMLのscriptタグのsrc属性には別ドメインのURLを指定して通信することができるという点を利用することによって別ドメインのサーバからデータを取得することが可能になる。 JSONPでは、通常、上記src属性のレスポンスの内容はjavascript関数呼び出しの形式となるため、src属性に指定するURLにその関数の名前をクエリ文字列の形式で付加する。一般的な方法では、この時に指定する関数名はWebページ側ですでに定義されているコールバック用の関数の名前になる。 関数名を渡すリクエストパラメータの名前はサーバとクライアント間で事前に取り決めておく必要がある。 例えば(callbackというパラメータ名でparseResponseという関数名を渡す場合)