VBA/VB6解析JSON数据包(JS脚本法)
VB 2023-06-29
先用json与VB对象做个对比吧,方便解释;在json中花括号{}括起来的我们可以理解成VB中字典对象,中括号[]括起来的我们可以把它理解VB中数组对象;
先上json对象解析代码
Public Function JsonObjToVbObject(sjson As String) As Object
On Error GoTo er:
Dim jsonobj As Object
With CreateObject("msscriptcontrol.scriptcontrol")
.Language = "JavaScript"
.addcode "var jsonobj=" & sjson
Set jsonobj = .codeobject
End With
Set JsonObjToVbObject = jsonobj
Exit Function
er:
Set JsonObjToVbObject = Nothing
End Function
使用实列
Sub test1()
Dim SJS As String: SJS = "{'状态':0,'信息':'查询成功','结果':[{'姓名':'张三','年龄':18,'身高':165,'体重':'66KG','爱好':'打球,瞟美女'},{'姓名':'李四','年龄':20,'身高':175,'体重':'70KG','爱好':'瞟美女','喜欢的美女':[{'姓名':'玲玲','身高':165,'体重':'48KG'},{'姓名':'婷婷','身高':170,'体重':'45KG'}]},{'姓名':'王五','年龄':22,'身高':185,'体重':'60KG','爱好':'看隔壁美女','喜欢美女类型':['御姐','萝莉','少妇']}]}"
Set VBOBJ = JsonObjToVbObject(SJS)
End Sub
下面我们来尝试取,第一层里面的“信息”的值,只需要以下操作即可
Debug.Print VBOBJ.jsonobj.信息
下面我们来单独取,“结果”中,“李四”的“爱好”,这里用到了“CallByName”,因为JScriptTypeInfo对象不予许直接点属性
Set 结果集 = VBOBJ.jsonobj.结果
Set 李四 = CallByName(结果集, "1", VbGet)
Debug.Print 李四.爱好
下面再看看怎么取出李四喜欢的美女的信息
Set 结果集 = VBOBJ.jsonobj.结果
Set 李四 = CallByName(结果集, "1", VbGet)
For Each 李四喜欢的美女 In 李四.喜欢的美女
Debug.Print 李四喜欢的美女.姓名
Debug.Print 李四喜欢的美女.身高
Next
取相同王五兄弟的喜欢的美女类型与上面的方法一样
Set 结果集 = VBOBJ.jsonobj.结果
Set 王五兄弟 = CallByName(结果集, "2", VbGet)
For Each 美女类型 In 王五兄弟.喜欢美女类型
Debug.Print 美女类型
Next
3.5.4.那么直接取出这几位兄弟的所有信息怎么操作呢?
For Each 信息 In 结果集 ''取字典类型
Debug.Print 信息.姓名
Debug.Print 信息.年龄
Debug.Print 信息.身高
Debug.Print 信息.体重
Debug.Print 信息.爱好
If 信息.姓名 = "李四" Then ''取字典类型
For Each 李四 In 信息.喜欢的美女
Debug.Print " 李四喜欢的美女:" & 李四.姓名
Debug.Print " 李四喜欢的美女:" & 李四.身高
Next
ElseIf 信息.姓名 = "王五" Then '去数组类型
For Each 王五 In 信息.喜欢美女类型
Debug.Print " 王五喜欢的美女类型:" & 王五
Next
End If
Next
上一篇:没有了