You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq从JSON中的JWT令牌提取声明并替换原令牌?

使用jq提取JWT声明并替换原令牌字段

你可以通过以下jq命令实现需求,核心思路是拆分JWT、解码中间的声明部分,再将声明合并到原JSON对象并移除原token字段:

(
  .token
  | split(".")[1]          # 拆分JWT,取出中间的声明部分
  | gsub("-";"+") | gsub("_";"/")  # 将Base64URL编码转换为标准Base64
  | (4 - (length % 4)) % 4 as $pad # 计算需要补充的等号数量(Base64长度需为4的倍数)
  | . + ("=" * $pad)       # 补全Base64填充符
  | @base64d               # Base64解码为字符串
  | fromjson               # 转换为JSON对象
) as $claims               # 将解码后的声明存入变量$claims
| del(.token) + $claims    # 删除原token字段,合并声明到原对象

示例验证

输入JSON:

{
  "id": 7,
  "time": "now",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYm9iYnkiLCJjb2xvciI6ImJsdWUiLCJ0cmVlIjoiZWxtIn0K.9JCVXpkI6ICc5RnIsIiN1IzUIJiOicGbhJye"
}

执行命令后输出:

{
  "id": 7,
  "time": "now",
  "name": "bobby",
  "color": "blue",
  "tree": "elm"
}

步骤说明

  1. 拆分JWT:通过split(".")将令牌拆分为头部、声明、签名三个部分,取索引为1的中间部分。
  2. 编码转换:JWT使用Base64URL编码,需替换特殊字符为标准Base64的对应字符。
  3. 补全填充符:标准Base64要求长度为4的倍数,计算并补充缺失的=。
  4. 解码与转JSON:将处理后的Base64字符串解码为JSON格式的声明对象。
  5. 合并对象:删除原token字段,将声明对象的键值对合并到原JSON中。

内容的提问来源于stack exchange,提问作者David Conrad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:22:33