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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:05:16