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