- 環境
- Windows10 Pro バージョン21H1
- GNU bash, version 4.4.23
- jq-1.6
事象 : jqコマンドでJSONの中身を抜き出したら文字化けした
KintoneのRest APIでアプリの参照権限を取得して、「設定対象のコード」だけを抜き出したら文字化けした。
参考 : アプリのアクセス権の取得 – cybozu developer network
$ curl -sS -X GET -H 'X-Cybozu-Authorization:パスワード認証;' https://サブドメイン.cybozu.com/k/v1/app/acl.json?app=172 | jq -r '.rights[].entity.code'
邂。逅・・A7lIQe
蜿ら・閠・jUmF8o
everyone
「設定対象のコード」だけを抜き出す前の状態では文字化けしていなかった・・・。
$ curl -sS -X GET -H 'X-Cybozu-Authorization:パスワード認証;' https://サブドメイン.cybozu.com/k/v1/app/acl.json?app=172 | jq -r '.rights[]'
{
"entity": {
"type": "ORGANIZATION",
"code": "管理者_A7lIQe"
#...省略...
"code": "参照者_jUmF8o"
#...省略...
"code": "everyone"
#...省略...
原因 : rオプションでダブルクォーテーションを消したから
# rオプションをつけている
$ curl ... | jq -r '.rights[]'
--raw-output / -r:
With this option, if the filter's result is a string then it will be written directly to standard output rather than being formatted as a JSON string with quotes. This can be useful for making jq filters talk to non-JSON-based systems.
jq Manual (development version)
(ざっくり訳)フィルタの結果が文字列の場合、引用符付きのJSON文字列としてフォーマットされるのではなく、標準出力に直接書き込まれます。これは、jqフィルタが非JSONベースのシステムと通信するのに役立ちます。
「設定対象のコード」だけを抜き出す前の状態は、-r
オプションをつけていてもダブルクォーテーションがついている。ということに気が付いた。
対応 : rオプションをやめる
ダブルクォーテーションがくっついてしまうけれど・・・文字化けするよりはマシ。
どなたかもっといい方法をご存じの方はご教授ください。
$ curl -sS -X GET -H 'X-Cybozu-Authorization:パスワード認証;' https://サブドメイン.cybozu.com/k/v1/app/acl.json?app=172 | jq '.rights[].entity.code'
"管理者_A7lIQe"
"参照者_jUmF8o"
"everyone"