HN 日本語サマリー

← 一覧へ戻る
プログラミング

クリップボード上のJSONを整形するためのjqの使い方

Using jq to format JSON on the clipboard (chris48s.github.io)

36 pointsby stefanvdw111 コメント

要約

この記事では、コマンドラインJSONプロセッサであるjqの便利な使い方を紹介しています。特に、クリップボードの内容を整形して元に戻すためのエイリアス(別名)の作成方法に焦点を当てています。macOSのpbcopy/pbpasteやLinuxのxclipを使った具体的なコマンド例と、JSONでない場合にエラーとならず元の内容を保持するエラーハンドリングの実装方法を解説しています。

全文翻訳

jqを使ってクリップボード上のJSONを整形する

Jqは素晴らしいツールです。私は頻繁に使っていますが、Sequoia McDowell氏による最近の記事には、まだ素晴らしいヒントがいくつか含まれています。一読の価値があります。この記事で特に注目したのは、以下のスニペットです。

この pretty-printing/フォーマット機能がとても気に入ったので、コピーした(OSの「クリップボード」にある)JSONをフォーマットしてクリップボードに戻すエイリアスを作成しました。

alias jsontidy="pbpaste | jq '.' | pbcopy"

これは非常に便利ですが、少し調整が必要です。まず、指摘されているように、pbcopyとpbpasteはmacOSのユーティリティです。心配いりません。Linuxではxclipに置き換えることができます。

xclip -selection clipboard -o | jq '.' | xclip -selection clipboard

しかし、ここで小さな問題に気づきました。このコマンドを実行し、クリップボードのテキストがJSONでない場合、jqはゼロ以外のコードで終了し、標準エラー出力にparse error: Invalid numeric literal at line 1, column 6のようなメッセージを出力しますが、標準出力には何も出力しません。パイプはゼロ以外の終了コードを気にしないため、クリップボードにあったものはすべて空文字列で上書きされてしまいます。そこで、エラーハンドリングを追加しましょう。

alias jsontidy="xclip -selection clipboard -o | (jq '.' || xclip -selection clipboard -o) | xclip -selection clipboard"

これでjsontidyは、JSONとして解析できるものはクリップボードからフォーマットしますが、そうでない場合はそのままにしておきます。