Command-Line
如何根據 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=="; }
謝謝你們
使用
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=" }