我有一个包含 JWT 令牌的 JSON 对象。我想从令牌中提取声明并将其放入 JSON 对象中,替换令牌。这是我的目标:
{
"id": 7,
"time": "now",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYm9iYnkiLCJjb2xvciI6ImJsdWUiLCJ0cmVlIjoiZWxtIn0K.9JCVXpkI6ICc5RnIsIiN1IzUIJiOicGbhJye"
}
JWT 包含以下声明(在 JWT 的中间字段中进行 Base64 编码,以点分隔):
{
"name": "bobby",
"color": "blue",
"tree": "elm"
}
如何使用 jq 提取声明并将其放入 JSON 中代替 JWT 令牌?
在点处分割,取出第二项,然后使用
@base64d
和 fromjson
进行解码:
jq '(.token / ".")[1] | @base64d | fromjson'
{
"name": "bobby",
"color": "blue",
"tree": "elm"
}
使用
splits
函数将标记拆分为点,使用 @base64d
过滤器对数据进行 Base64 解码,并使用 fromjson
过滤器将字符串转换为 JSON。
|=
更新运算符可用于将结果分配回.token
字段。
jq '.token |= ([splits("\\.")][1] | @base64d |fromjson)' file.json
结果:
{
"id": 7,
"time": "now",
"token": {
"name": "bobby",
"color": "blue",
"tree": "elm"
}
}