jq - 解码流中的 json 值
jq - decode json value in flow
我需要解码来自 apache in flow 的授权值并将该值替换为用户名,返回修改后的 json。
原版Json:
{ "time":"2022-04-07T12:53:39.302+0300",
....
"user":"Basic c2RwC2ZhcmZZc3Q6c2RfX2ZhcmVhz3Q=" }
我想得到json:
{ "time":"2022-04-07T12:53:39.302+0300",
....
"user":"<login>" }
此处的解码值为<username>:<password>
我正在尝试为此使用 jq
实用程序
stdin> | jq -r '.user | gsub ("Basic "; "") | @base64d | gsub ("^.*:"; "")'
但是 jq
returns 值本身,而不是修改后的 json。
此外,如果 json 值 (user
) 不是 base64,我会收到错误消息
"user":"-"
jq: error (at <stdin>:1): string ("-") is not valid base64 data
如果用户值不包含“Basic”,我怎样才能得到完整的修改 json 并避免修改?
使用if ... then ... else ... end
根据值实现不同的行为。
jq '.user |= if startswith("Basic ")
then .[6:] | @base64d
else . end
' file.json
我需要解码来自 apache in flow 的授权值并将该值替换为用户名,返回修改后的 json。
原版Json:
{ "time":"2022-04-07T12:53:39.302+0300",
....
"user":"Basic c2RwC2ZhcmZZc3Q6c2RfX2ZhcmVhz3Q=" }
我想得到json:
{ "time":"2022-04-07T12:53:39.302+0300",
....
"user":"<login>" }
此处的解码值为<username>:<password>
我正在尝试为此使用 jq
实用程序
stdin> | jq -r '.user | gsub ("Basic "; "") | @base64d | gsub ("^.*:"; "")'
但是 jq
returns 值本身,而不是修改后的 json。
此外,如果 json 值 (user
) 不是 base64,我会收到错误消息
"user":"-"
jq: error (at <stdin>:1): string ("-") is not valid base64 data
如果用户值不包含“Basic”,我怎样才能得到完整的修改 json 并避免修改?
使用if ... then ... else ... end
根据值实现不同的行为。
jq '.user |= if startswith("Basic ")
then .[6:] | @base64d
else . end
' file.json