jsonファイルに基づいて文字列を正しくエンコードする方法は?

jsonファイルに基づいて文字列を正しくエンコードする方法は?

次のファイルがありますbasic.json

{
    "user": "user",
    "pass": "password"
}

次のようにBase64でエンコードしようとしています。

"Basic dXNlcjpwYXNzd29yZA=="

私はかなり近いと思います:

echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64)

使ったここでjqアクセス方法を見つけることができます。

使ったここでbase64メソッドを探してください。

しかし、結果は間違っていました。

Basic InVzZXIiOiJwYXNzd29yZCIK

-e記事に記載されているフラグを試してみました。

echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64 -e)

ただし、次のエラーが発生します。

base64:無効なオプション - 'e'

私はどこで間違っていますか?

よろしくお願いします。


私のソリューション

コマンドは次のように終了します。

RUN echo "map \"\" \$basicAuth {\n\
\tdefault $(jq '"Basic " + ("\(.user):\(.pass)" | @base64)' basic.json);\n\
}" > basic.conf

私のbasic.confファイルはついに正しい基本認証を持っています。

map "" $basicAuth {
    default "Basic dXNlcjpwYXNzd29yZA==";
}

みんなありがとう

ベストアンサー1

jqを含むさまざまな出力フォーマットフィルタが用意されています@base64

たとえば、JSONオブジェクト全体をfileにエンコードするには、basic.json次のように使用できます。

$ jq -r '. | @base64 | "Basic \(.)"' basic.json
Basic eyJ1c2VyIjoidXNlciIsInBhc3MiOiJwYXNzd29yZCJ9

この"Basic \(.)"フィルタは、目的の形式を取得するために文字列補間のみを使用します。


これらのフィルタをより一般的に使用すると、特定の値をエンコードできます。

$ jq '.pass |= @base64' basic.json
{
  "user": "user",
  "pass": "cGFzc3dvcmQ="
}

おすすめ記事