最近は API の返り値が JSON になっていることは珍しくなくなってきましたが、API をりようしたちょっとしたスクリプトを書くときにJSON の中身からデータを取り出して処理したいとなるとちょっと厄介です。これまでは JSON パーサーを持った Ruby や Node.JS なんかを使っていちいち処理を書いていたのですが、やはりちょっとヘビーなのでうまく bash だけでやる方法がないかどうか調べてみました。
いくつかググって調べてみたら Node.JS を利用したコマンドラインのjsontool*1 というプロダクトが見つかりました。
インストールは Node.JS が導入されていれば nph で一撃です。
# npm install -g jsontoolnpm http GET https://registry.npmjs.org/jsontoolnpm http 200 https://registry.npmjs.org/jsontoolnpm http GET https://registry.npmjs.org/jsontool/-/jsontool-7.0.1.tgznpm http 200 https://registry.npmjs.org/jsontool/-/jsontool-7.0.1.tgz/usr/bin/json -> /usr/lib/node_modules/jsontool/lib/jsontool.jsjsontool@7.0.1 /usr/lib/node_modules/jsontool# json --versionjson 7.0.1written by Trent Mickhttps://github.com/trentm/json
以下、簡単な実行例を。
あとはこんな感じで簡単に JSON から必要なデータを取り出すことができます。
perl にあった xpath コマンドのような感じですね。
$ echo '{"a":"123","b":[1,2,3],"c":{"1":"a","2":"b","3":"c"}}' | json{ "a": "123", "b": [ 1, 2, 3 ], "c": { "1": "a", "2": "b", "3": "c" }}$ echo '{"a":"123","b":[1,2,3],"c":{"1":"a","2":"b","3":"c"}}' | json a123$ echo '{"a":"123","b":[1,2,3],"c":{"1":"a","2":"b","3":"c"}}' | json b[ 1, 2, 3]$ echo '{"a":"123","b":[1,2,3],"c":{"1":"a","2":"b","3":"c"}}' | json b[0]1$ echo '{"a":"123","b":[1,2,3],"c":{"1":"a","2":"b","3":"c"}}' | json c.1a