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

解码JWT打印日志时如何去除cjson.encode添加的双引号?

解决Lua处理JWT时日志输出多余双引号的问题

我明白你遇到的问题了——用cjson.encode()处理JWT payload里的sub字段后,日志里多了一层不必要的双引号,这确实挺烦人的。

问题根源

你现在的代码里,jwt_obj.payload.sub本身就是一个字符串类型的值(比如用户ID、唯一标识这类字符串),而cjson.encode()的作用是把Lua值转换成JSON格式的字符串。当你给它传入一个字符串时,它会按照JSON规范给这个字符串加上双引号包裹,所以日志里就出现了多余的引号。

修正方案

直接去掉cjson.encode()调用,直接输出sub字段的值就可以了:

local jwt = require "resty.jwt"
local jwt_obj = jwt:load_jwt(res.access_token)
-- 不需要cjson.encode,直接拼接字段值
ngx.log(ngx.DEBUG, "res.access_token.sub=", jwt_obj.payload.sub)

如果担心sub字段可能不是字符串类型(比如某些场景下是数字),可以用tostring()做一次类型转换,避免潜在的拼接错误:

ngx.log(ngx.DEBUG, "res.access_token.sub=", tostring(jwt_obj.payload.sub))

额外提示

cjson.encode()更适合处理复杂的Lua table结构,把它们转换成JSON字符串。对于单个的字符串、数字这类简单类型,完全不需要用它来编码,直接使用或者转成字符串就足够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:29:39