如何根据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.

例如,如果你想在 file 中编码整个 JSON 对象basic.json,那么你可以使用类似的东西

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

"Basic \(.)"过滤器仅使用字符串插值来获得您想要的格式。


这种过滤器的更常规用途可能是对特定值进行编码。

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

答案2

使用jq@base64运算符:

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

user并且pass值作为字符串给出给base64运算符。剩下的就是简单的字符串连接。

相关内容