jqコマンドでURIエンコーディング

以下のように@uriフィルターを使用してURIエンコードができる。

$ echo -n '"テスト"' | jq '@uri'
"%E3%83%86%E3%82%B9%E3%83%88"

@uriフィルターはURIエンコードを行う。

入力をRawモードで扱う

-Rオプションを指定すると、入力がJSON形式ではなくただの文字列(Rawモード)で扱える。
先述のコマンド例ではダブルクオートで囲って無理やりJSONとしているが、Rawモードを使用するとそのまま文字列を扱える。

$ echo -n 'テスト' | jq -R '@uri'
"%E3%83%86%E3%82%B9%E3%83%88"

"テスト"のようにダブルクオートで囲まず、テストのようにそのまま入力できる。

出力をRawモードで扱う

-rオプションを指定すると出力にダブルクオートがつかず、Rawモードで出力される。

$ echo -n '"テスト"' | jq -Rr '@uri'
%22%E3%83%86%E3%82%B9%E3%83%88%22

その他のフィルター

@htmlフィルター

@htmlフィルターを使用すると、HTMLエンコードができる。

$ echo -n '<html>' | jq -Rr '@html'
&lt;html&gt;

@base64フィルター

@base64フィルターを使用すると、Base64エンコードができる。

$ echo -n 'テスト' | jq -Rr '@base64'
44OG44K544OI

@base64dフィルター

@base64dフィルターを使用すると、Base64デコードができる。

$ echo -n '44OG44K544OI' | jq -Rr '@base64d'
テスト