プログラミング
クリップボード上のJSONを整形するためのjqの使い方
Using jq to format JSON on the clipboard (chris48s.github.io)
要約
この記事では、コマンドラインJSONプロセッサであるjqの便利な使い方を紹介しています。特に、クリップボードの内容を整形して元に戻すためのエイリアス(別名)の作成方法に焦点を当てています。macOSのpbcopy/pbpasteやLinuxのxclipを使った具体的なコマンド例と、JSONでない場合にエラーとならず元の内容を保持するエラーハンドリングの実装方法を解説しています。
全文翻訳
Jqは素晴らしいツールです。私はそれを頻繁に使いますが、Sequoia McDowell氏による最近の記事には、まだいくつかの素晴らしいヒントが含まれています。一読の価値は十分にあります。
この投稿で特に注目したのは、以下のスニペットです。
この pretty-printing/フォーマット機能が非常に気に入ったので、コピーしたJSON(OSの「クリップボード」にある)をフォーマットしてクリップボードに戻すエイリアスを作成しました。
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として解析できるものであればクリップボードの内容をフォーマットしますが、そうでない場合はそのままにします。