如何根据json文件正确编码字符串?

Was*_*des 1 command-line string base64 jq

我有以下basic.json文件:

{
    "user": "user",
    "pass": "password"
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其编码为 Base64,如下所示:

"Basic dXNlcjpwYXNzd29yZA=="
Run Code Online (Sandbox Code Playgroud)

我想我已经很接近了:

echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64)
Run Code Online (Sandbox Code Playgroud)

我使用了此处找到的 jq 访问方法

我使用了此处找到的 base64 方法

但结果是错误的:

Basic InVzZXIiOiJwYXNzd29yZCIK
Run Code Online (Sandbox Code Playgroud)

我已经尝试过-e文章中提到的标志:

echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64 -e)
Run Code Online (Sandbox Code Playgroud)

但它会抛出这个错误:

base64:无效选项 -- 'e'

我哪里搞错了?

提前致谢。


我的解决方案

命令是这样结束的:

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

我的basic.conf文件终于有了正确的基本身份验证:

map "" $basicAuth {
    default "Basic dXNlcjpwYXNzd29yZA==";
}
Run Code Online (Sandbox Code Playgroud)

谢谢你们

ste*_*ver 5

jq提供了许多输出格式过滤器,包括@base64.

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

$ jq -r '. | @base64 | "Basic \(.)"' basic.json
Basic eyJ1c2VyIjoidXNlciIsInBhc3MiOiJwYXNzd29yZCJ9
Run Code Online (Sandbox Code Playgroud)

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


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

$ jq '.pass |= @base64' basic.json
{
  "user": "user",
  "pass": "cGFzc3dvcmQ="
}
Run Code Online (Sandbox Code Playgroud)