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

Classic ASP结合json2.js:如何访问含特殊字符的JSON键?

在Classic ASP中访问带特殊字符的JSON键

当你用json2.js解析Google reCAPTCHA返回的JSON(比如{"success":false,"error-codes":["invalid-input-response"]})时,会发现能正常用myJSON.success访问不带特殊字符的键,但带连字符的error-codes怎么都访问不了——这是因为VBScript里的标识符不能有连字符,点语法里的error-codes会被当成error减codes,直接报错。

下面给两种可行的解决办法:

方法一:用JScript代码块处理(推荐)

JScript支持用方括号[]来访问任意字符串格式的键,所以可以先在服务器端的JScript块里把特殊键的值提取出来,再交给VBScript使用:

<script language="JScript" runat="server" src='path/to/json2.js'></script>

<%
' 先拿到reCAPTCHA返回的JSON字符串
Dim recaptchaJson
recaptchaJson = Request.Form("recaptcha_response")
%>

<script language="JScript" runat="server">
// 解析JSON
var jsonObj = JSON.parse('<%= recaptchaJson %>');
// 把需要的值赋值给VBScript能直接用的变量
successStatus = jsonObj.success;
errorCodesArray = jsonObj["error-codes"];
</script>

<%
' 现在在VBScript里就能正常用这些变量了
Response.Write("验证状态:" & successStatus & "<br>")

If IsArray(errorCodesArray) Then
    Response.Write("错误码列表:<br>")
    For i = 0 To UBound(errorCodesArray)
        Response.Write("- " & errorCodesArray(i) & "<br>")
    Next
End If
%>

方法二:在VBScript里用CallByName函数

如果不想切换到JScript块,也可以用VBScript的CallByName函数,通过字符串指定键名来读取值:

<script language="JScript" runat="server" src='path/to/json2.js'></script>

<%
Dim myJSON, success, errorCodes
myJSON = Request.Form("recaptcha_response")
Set myJSON = JSON.parse(myJSON)

' 正常访问无特殊字符的键
success = myJSON.success

' 用CallByName读取带连字符的键
Set errorCodes = CallByName(myJSON, "error-codes", vbGet)

Response.Write("验证状态:" & success & "<br>")
If IsArray(errorCodes) Then
    Response.Write("错误码:" & errorCodes(0) & "<br>")
End If
%>

小提醒

  • 方法一里要注意,如果原始JSON字符串里有单引号,得先在VBScript里转义,不然JScript解析的时候会出错。
  • 方法二里的vbGet是告诉CallByName我们要读取这个属性,刚好适配JScript对象的属性访问逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:23:10