:经典ASP使用JScript(在服务器端运行)解析JSON数据

在经典 ASP(VBScript)中解析 JSON 没有原生支持,但我们可以借助 JScript(在服务器端运行)来解析。
您可以嵌入 <script language="JScript" runat="server"> 代码块,利用 JavaScript 解析响应字符串,然后返回给 VBScript 使用。
关于JSON.parse报错
使用JSON.parse报错 'JSON' 未定义 的原因是您的 IIS 环境中,服务器端 JScript 引擎版本较低(比如 Windows Script Host 5.6 或更早),没有内置 JSON 全局对象。
经典 ASP 默认使用的 JScript 通常是旧版,因此我们需要换一种方式解析 JSON。
解决方案:使用 eval 解析(兼容旧版 JScript)
eval 可以将合法的 JavaScript 表达式转换为对象。只要响应字符串是标准 JSON 格式,用 eval('(' + jsonStr + ')') 即可安全解析。
<script language="JScript" runat="server">
function GetContentFromJson(jsonStr) {
try {
// 用 eval 将 JSON 字符串转为对象(注意外层括号)
var obj = eval('(' + jsonStr + ')');
// 提取 content
return obj.choices[0].message.content;
} catch(e) {
return "解析错误:" + e.message;
}
}
</script>完整的 ASP 后端调用示例:
<%
'假设responseText来自己的服务,内容是{"choices":[{"message":{"content":"zhangsan"},"no":18},{"message":{"content":"lisi"},"no":20}]}
content = GetContentFromJson(responseText)
Response.Write "<pre>" & content & "</pre>" '结果zhangsan
%>备用方案:VBScript 正则提取(不推荐,仅作参考)
如果无法使用 JScript,可以用正则表达式粗略提取 content 字段,但要注意 content 内可能包含引号、换行,容易出错,仅适用于内容格式简单的情况。
Function ExtractContent(jsonStr)
Dim reg, matches, match
Set reg = New RegExp
reg.Pattern = """content"":""(.*?)""(?=[,}])" ' 匹配 content 值
reg.IgnoreCase = True
reg.Global = False
reg.Multiline = True
Set matches = reg.Execute(jsonStr)
If matches.Count > 0 Then
ExtractContent = matches(0).SubMatches(0)
Else
ExtractContent = ""
End If
End Function但此正则无法正确处理转义字符和嵌套结构,不推荐用于生产环境。
最终建议
如果您的 ASP 环境禁用了 JScript 或不允许服务器端脚本混合语言,您也可以将整个响应字符串返回给客户端,由浏览器端的 JavaScript 解析(即方案一的前端处理)。
⚠️ 关于 eval 的安全风险
eval 会执行任意 JavaScript 代码,如果 responseText 来自不可信来源,可能引发注入攻击。但您的场景中,responseText 来自您自己的服务,内容是可信的,因此风险可控。
该文章在 2026/9/4 9:36:44 编辑过