既然JSON来自于JavaScript,那么用JS想必可以更方便的解析JSON,非常幸运的是VBA中可以使用JS。
示例JSON数据如下所示。
{
"applySn": "粤G妆网备字2017050113",
"applySnTT": "",
"apply_enter_address": "",
"enterpriseName": "广州市金日精细化工有限公司",
"enterpriseNameTT": "",
"is_off": "N",
"newProcessid": "20170421153208vq3fu",
"off_date": "",
"org_name": "",
"processid": "20170421153208vq3fu",
"productName": "悠莅雅柔美亮肤按摩霜",
"productNameTT": "",
"provinceConfirm": "2017-05-17"
}
示例代码如下。
Sub JSON_JS()
Dim objJS As Object
Dim strJSON As String
Dim strJSCode As String
strJSON = [a1]
Set objJS = CreateObject("MSScriptControl.ScriptControl")
objJS.Language = "javascript"
strJSCode = "var json = " & strJSON & ";"
objJS.AddCode (strJSCode)
For i = 4 To 16
Cells(i, 2).Value = objJS.Eval("json." & Cells(i, 1))
Next
Set objJS = Nothing
End Sub
代码解析
第6行代码使用后期绑定的方式创建ScriptControl
对象,如果使用前期绑定方式,需要在VBE中先引用Microsoft Script Control 1.0
。
第7行代码指定ScriptControl
对象的语言为JavaScript。
第8行代码为JS代码,创建对象变量json
。
第9行为ScriptControl
对象添加代码。
第10行到第12行代码在循环过程中,使用Eval
获取json对象的Value。
运行示例代码,结果如下。
单步运行第9行代码之后,【本地窗口】如下所示,可以看到在objJS
对象中的json类型为Variant/Object/JScriptTypeInfo
,其中保存的就是需要定位的JSON数据,但是VBA无法直接获取其中的Key,能够实现的是使用第11行代码中的objJS.Eval
方式利用Key获取Value。
使用JS解析的方式如何获取Key呢?请听下回分解。
相关博文链接:
VBA解析JSON数据(1)-- Split函数
VBA解析JSON数据(2)–正则表达式
VBA解析JSON数据(3)–JavaScript
VBA解析JSON数据(4)–JavaScript进阶
VBA解析JSON数据(5)–JavaScript回写Excel