ログファイルやデータファイルからレコードデータを複数取得して、それを配列で返すのは非常に簡単にできますが、これを任意のデータをkeyにして、連想配列で出力するという複雑な処理をやってみたいと思います。
どんな時に使うの?
商品IDと商品詳細が追記されていくようなレコードタイプのログで、そのデータから商品IDをkeyとした、データを取得したい場合などで、レコード型データを簡単にHASHデータとして取得が出来るようになります。
その後、JavascriptのAjaxで取得した場合は、即座にJSON.parse()すればいいし、PHPの場合であれば、json_decode()してしまえば、テキストレコードデータからのHASH取得が簡単に行えるようになります。
from_entriesを使って連想配列化
jqは様々な命令機能を持っているため、リファレンスページを熟読してみると、色々な発見があり、非常に高機能なツールであることが分かります。
https://stedolan.github.io/jq/manual/
ここに記述されている「from_entries」でkey-value出力ができるという内容が書かれています。
サンプルで登録されているコードは以下のとおりです。
jq 'from_entries'
Input [{"key":"a", "value":1}, {"key":"b", "value":2}]
Output {"a": 1, "b": 2}
サンプルデータを使って実践
{"id":"001","name":"リンゴ"}
{"id":"002","name":"バナナ"}
{"id":"003","name":"オレンジ"}
{"id":"004","name":"キウイ"}
{"id":"005","name":"マンゴー"}
jq --slurp '[ .[] | {key:.id , value:.name} ] | from_entries' data.json
{
"001": "リンゴ",
"002": "バナナ",
"003": "オレンジ",
"004": "キウイ",
"005": "マンゴー"
}
かなりシンプルなデータ構造でやったので、簡単に見えるかもしれませんが、key-valueの配列データを出力して"from_entries"でhash化するという内容になっています。
valueの値に色々なデータを入れたり、内部をさらに配列や連想配列にすることもできるので、応用パターンは無限大ですね。
配列で受け取ることが多いjqコマンドですが、連想配列も慣れると簡単に取得できて、key検索などが非常に高速に行なうことが可能になります。
jq使いこなすともはやSQLは不要なのではないかとすら感じるようになってきましたね・・・いいのかな?
0 件のコメント:
コメントを投稿