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
相关产品推荐
相关产品推荐

