LoginSignup
0
0

More than 1 year has passed since last update.

jqコマンドで文字化けした時の対応方法

Posted at
  • 環境
    • 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"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0