「fx」でターミナルからJSONにJavaScriptの関数を実行したり巨大なJSONを折りたたんで表示したりする
APIのレスポンスなどのJSONはターミナルでサクッと確認することが多いです。 この時、JSON自体が巨大な場合だとフォーマットをかけても結局巨大すぎて見るのが辛いなと思っていました。
このような場合にfxというツールを通してJSONを見ると良いかもと思いましたのでこちらで紹介いたします。
fxはビューアーのためだけのツールというわけではないのですが、ひとまず以下をご覧いただくと「巨大なJSONを見るのに良さそう」感が伝わるのではないかと思います。
いかがでしょうか。要するにオブジェクトと配列がたたまれ、インタラクティブに各要素を展開することができます。 開くのが面倒なケースもあると思うのでそこは適時使い分けかなと思いますが、本当に辛いサイズのJSONであればこの形式は嬉しいのではと思いました。
そしてそもそもfxはターミナルでJSONに対してJavaScriptの関数を適用するためのツールです。 以下README.mdにて紹介されている利用例を一通り試してみましたので紹介いたします。
試した環境
$ node --version v8.9.1 $ npm -version 5.8.0
インストール
npm install -g fx
インタラクティブモード
先ほどのアニメーションのように、
引数なしでパイプからfxにJSONを渡してあげるとインタラクティブにJSONを参照できます。
echo '{"key":["value1","value2"]}' | fx
この際オブジェクト、配列は折りたたまれて表示されます。{...}
、[...]
をクリックすることで値が展開されます。
また、以下のコマンドがそれぞれ利用できます。
q
orEsc
orCtrl
+c
: インタラクティブモードの終了e
orE
: 全て展開up
ordown
ork
+j
: 上下移動g
orG
: トップ/ボトムへの移動
関数の実行
JSONに対して関数を実行します。
$ echo '{"key":["value1","value2"]}' | fx 'x => x.key[0].toUpperCase()' VALUE1
アロー関数を使わない場合、thisキーワードで渡された関数を参照できます。
$ echo '{"key":["value1","value2"]}' | fx 'this.key[0].toUpperCase()' VALUE1
this
は省略可能です。
$ echo '{"key":["value1","value2"]}' | fx '.key[0].toUpperCase()' VALUE1
関数のチェーン
複数の関数を渡すとそれぞれ適用されます。
$ echo '{"key":["value1","value2"]}' | fx '.key[0] + " string"' '.toUpperCase()' VALUE1 STRING
ジェネレーター
ジェネレーターが利用できます。
$ echo '{"key":[{"k1":"val1"},{"k2":"val2"}]}' | fx 'yield* this.key; yield {"k3":"v3"}; yield {"k4":"v4"};' [ { "k1": "val1" }, { "k2": "val2" }, { "k3": "v3" }, { "k4": "v4" } ]
スプレッド構文
スプレット構文によるJSONの展開が可能です。
$ echo '{"age": 3, "name":"jun"}' | fx '{...this, "age": 28}' { "age": 28, "name": "jun" }
npmパッケージの利用
グローバルにインストールしたnpmパッケージを利用できます。
npm install -g uuid echo '{"age": 28, "name":"jun"}' | fx '{...this, id: require("uuid").v4()}' { "age": 28, "name": "jun", "id": "646dda81-ea3f-42d8-84d5-5a40ccbb718f" }
フォーマットの変更
要するにJSONに対してJavaScriptの関数を実行できるので、JSON以外のフォーマットに変更することができます。
$ echo '["a","b","c"]' | fx 'this.forEach(v => console.log(v))' 2>/dev/null | xargs echo a b c
上記では配列を一行ずつ出力し、xargsに渡しています。
デフォルトだとforEachの戻り値のundefined
も出力されてしまいます。undefined
は標準エラー出力に出力されるため、/dev/nullに捨てています。
まとめ
fxはターミナルでJSONに対してJavaScriptを実行するためのコマンドラインツールです。コマンドラインからパイプで渡したJSONに関数を実行したり、その中でnpmパッケージを利用したり、巨大なJSONを参照する際にオブジェクトや配列を折りたたんで表示したりできます。