上一篇博客【VBA解析JSON数据(1)】讲到过:JSON 本质是一个字符串(由花括号{}包裹起来),解析JSON数据其实就是处理字符串。那么大家肯定会想起字符处理的神器——正则表达式。
示例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_RegExp()
Dim Res()
Dim objRegEx As Object
Dim objMH As Object
Dim j As Integer
Set objRegEx = CreateObject("vbscript.regexp")
objRegEx.Pattern = """(.*?)"": ""(.*?)"""
objRegEx.Global = True
Set objMH = objRegEx.Execute([A1].Value)
ReDim Res(objMH.Count, 1 To 2)
For j = 0 To objMH.Count - 1
Res(j, 1) = objMH(j).submatches(0)
Res(j, 2) = objMH(j).submatches(1)
Next
Range("A3:B3").Value = Array("Key", "Value")
Range("A4").Resize(objMH.Count, 2).Value = Res
Set objRegEx = Nothing
Set objMH = Nothing
End Sub
代码解析
第6行代码创建正则表达式对象。
第7行代码指定正则匹配表达式,其中两个圆括号用于匹配需要提取的KEY和VALUE,双引号在VBA表达式中需要使用两个双引号。
“(.*?)”: “(.*?)”
第8行代码指定为全局搜索。
第9行代码对指定字符串进行匹配,结果保存在objMH对象中。
第10行代码重新定义结果数组的维度。
第11行到第14行循环结构将匹配结果写入数组。
第16行代码将结果写入工作表中A4单元格开始的区域。
运行示例代码,结果如下。
相关博文链接:
VBA解析JSON数据(1)-- Split函数
VBA解析JSON数据(2)–正则表达式
VBA解析JSON数据(3)–JavaScript
VBA解析JSON数据(4)–JavaScript进阶
VBA解析JSON数据(5)–JavaScript回写Excel