Command-Line

如何根據 json 文件正確編碼字元串?

  • June 1, 2020

我有以下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==";
}

謝謝你們

使用jq@base64運算符:

<basic.json jq '"Basic " + ("\(.user):\(.pass)"|@base64)'
"Basic dXNlcjpwYXNzd29yZA=="

user並且pass值作為字元串提供給base64操作員。剩下的就是簡單的字元串連接。

jq提供了許多輸出格式過濾器,包括@base64.

因此,例如,如果您想在 file 中編碼整個 JSON 對象basic.json,那麼您可以使用類似

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

過濾器"Basic \(.)"僅使用字元串插值來獲得所需的格式。


這種過濾器的更正常用途可能是對特定值 ex 進行編碼。

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

引用自:https://unix.stackexchange.com/questions/590244