概要
SELECTした結果をJSON文字列にして他のテーブルに保存する必要がありました。
そのため、調べたことをメモしておく。
SELECT結果をJSON文字列にする
JSON_OBJECT
関数を使ったら、サクッと作れた。
test.sql
-- hoge_logsテーブルにhogeテーブルの一部データをINSERTする
INSERT INTO `hoge_logs` (`status`, `hoge_id`, `json`)
SELECT
'error' AS `status`,
`id` AS `hoge_id`,
JSON_OBJECT(
'id', `id`,
'code', `code`,
'name', `name`
) AS `json`
FROM
`hoge`
WHERE
`hoge` = '1'
;
こんな感じ...
何かしらの処理に失敗したデータを簡易にJSON文字列にしてログ出力しておくには便利かも♪。
※ スクリプトが使えず、SQLで処理する必要がある場合にしか使わないだろうけど...
JSON文字列を展開する
逆に、保存したJSON文字列を再展開したい場合はどうするんだろうと思い調べる。
JSON_EXTRACT
とJSON_UNQUOTE
を使ったらできそうです。
SELECT
JSON_UNQUOTE(JSON_EXTRACT(`data_json`, '$.id')) AS `id`,
JSON_UNQUOTE(JSON_EXTRACT(`data_json`, '$.code')) AS `code`,
JSON_UNQUOTE(JSON_EXTRACT(`data_json`, '$.name')) AS `name`
FROM
`hoge_logs`
WHERE
`hoge_id` = '1'
;
結構、JSON文字列を扱う関数が合っていろいろできるんですね。
参考サイト
以上