VBScript读取Google地理编码API返回JSON及提取参数方法咨询
在VBScript中解析Google Geocoding API的JSON响应
既然你已经能成功获取到Google Geocoding API返回的JSON字符串,接下来的解析工作其实可以借助JScript的原生JSON处理能力来完成——毕竟VBScript本身没有内置的JSON解析功能,这种跨语言调用的方式是最实用的解决方案之一。
下面是完整的示例代码,包含解析JSON、提取formatted_address以及遍历address_components数组的逻辑:
' 假设你已经通过API获取到的JSON字符串存储在此变量中 Dim rawJsonStr rawJsonStr = "这里替换成你实际获取到的JSON内容" ' 创建ScriptControl对象,用于调用JScript的JSON解析功能 Dim jsonParser Set jsonParser = CreateObject("ScriptControl") jsonParser.Language = "JScript" On Error Resume Next ' 转义JSON字符串中的单引号,避免Eval执行出错 Dim escapedJsonStr escapedJsonStr = Replace(rawJsonStr, "'", "\'") ' 解析JSON为JScript对象 Dim apiResponse Set apiResponse = jsonParser.Eval("JSON.parse('" & escapedJsonStr & "')") ' 处理解析错误 If Err.Number <> 0 Then WScript.Echo "JSON解析失败: " & Err.Description WScript.Quit End If ' 检查API返回的状态是否正常 If apiResponse.status <> "OK" Then WScript.Echo "API请求未成功,状态码: " & apiResponse.status WScript.Quit End If On Error GoTo 0 ' 获取第一个匹配的地址结果(通常我们只需要最相关的第一个结果) Dim addressResult Set addressResult = apiResponse.results(0) ' 提取并输出formatted_address WScript.Echo "格式化地址: " & addressResult.formatted_address ' 遍历address_components数组,提取每个组件的信息 WScript.Echo vbCrLf & "地址组件详情:" Dim component, idx For idx = 0 To addressResult.address_components.length - 1 Set component = addressResult.address_components(idx) WScript.Echo "组件" & (idx + 1) & ":" WScript.Echo " 完整名称: " & component.long_name WScript.Echo " 简称: " & component.short_name ' 借助JScript将types数组转为逗号分隔的字符串(VBScript无法直接处理JScript数组) WScript.Echo " 类型: " & jsonParser.Eval("'" & component.types & "'") Next ' 释放对象资源 Set component = Nothing Set addressResult = Nothing Set apiResponse = Nothing Set jsonParser = Nothing
关键细节说明
- ScriptControl的作用:通过创建
ScriptControl对象并指定语言为JScript,我们可以直接调用JScript原生的JSON.parse()方法来解析JSON字符串,这比自己写VBScript的JSON解析函数要可靠得多。 - 单引号转义:在将JSON字符串传入
Eval()之前,必须把字符串中的单引号替换为\',否则会破坏JS代码的语法结构导致解析失败。 - API状态检查:一定要先判断
status字段是否为OK,避免在API返回错误(比如密钥无效、地址找不到)时继续执行后续逻辑。 - 处理JScript数组:VBScript无法直接遍历JScript数组的元素,所以我们通过
length属性获取数组长度,再通过索引访问每个元素;对于types这种子数组,我们再次借助JScript将其转为逗号分隔的字符串输出。
内容的提问来源于stack exchange,提问作者Preethi Lakmali
相关产品推荐
相关产品推荐

