Kong插件Lua脚本JSON转义问题:解码失败求解决方案
Kong插件Lua脚本JSON解码失败(含反斜杠)解决方案
问题根源
编码后的JSON字符串出现多余反斜杠,通常是两种情况:一是日志输出工具(如util.dump)对字符串做了转义显示,二是对已编码的JSON字符串重复执行了json.encode操作,导致嵌套转义。
解决方法
1. 确认真实的body内容
util.dump会对字符串中的特殊字符做转义输出,比如原始JSON字符串{"mobileno":"98765467","pwd":"demo123"}会被显示为"{\"mobileno\":\"98765467\",\"pwd\":\"demo123\"}"。先打印原始内容确认:
local json = require "cjson" body = json.encode(response) -- 打印原始长度和内容,避免dump的转义干扰 util.application_logging():debug("原始body长度: " .. #body) util.application_logging():debug("原始body内容: " .. body)
2. 移除多余反斜杠(若确实存在)
如果确认body中存在真实的多余反斜杠,用字符串替换清理:
-- 仅移除JSON转义的双引号反斜杠(更安全,避免误删合法转义) body = body:gsub('\\"', '"') -- 若存在其他多余反斜杠,可全局移除(谨慎使用) -- body = body:gsub("\\", "")
3. 安全解码并捕获异常
解码时用pcall捕获错误,避免插件崩溃:
local decoded_body, err = pcall(json.decode, body) if decoded_body then util.application_logging():debug("解码成功: " .. util.dump(decoded_body)) else util.application_logging():error("解码失败: " .. err) end
4. 排查重复编码问题
检查response是否已经是JSON字符串:如果response不是Lua表而是已编码的JSON,再次执行json.encode会导致嵌套转义。这种情况直接使用response即可,无需二次编码。
内容的提问来源于stack exchange,提问作者Nani
相关产品推荐
相关产品推荐

