Excel VBA解析JSON数据

JSON本质上是按照JavaScript对象、数组书写的一堆字符串,很可惜VBA直到目前为止都没有相应解析的方法。对于简单的数据可以用split方法、或者使用正则表达式来提取,如果过于复杂就需要用JavaScript语言来解析了。


 实现过程:

我们先请求一组JSON数据来分析解析过程:

1、先通过winhttp对象请求视频收藏夹一组JSON数据。

Sub json解析()
    Dim url$, data$
    url = "JSON数据的请求地址"
    data = getJSON(url)'拿到JSON数据
End Sub

Function getJSON(url)
    With CreateObject("WinHttp.WinHttpRequest.5.1")
        .Open "GET", url, True
        .send
        .WaitForResponse
        getJSON = .ResponseText
    End With
End Function

2、接着创建ScriptControl对象来使用 JavaScript语言。

3、用AddCode方法添加一段js代码,把JSON数据传入到js执行,var data变量接收JSON数据。后面使用js.eval方法获取想要的值。

4、我想要的数据都在medias数组里,根据js访问对象属性的方法:data.data.medias。然后获取该属性的长度Length,遍历每一个视频的基本信息

Sub json解析()
    Dim url$, data$
    url = Join([{"media_id=1017007045","pn=1","ps=20","order=mtime","type=0","tid=0","platform=web","jsonp=jsonp"}], "&")
    data = getJSON(getHeader() & url) '拿到JSON数据
    
    Dim sht As Object, js As Object, l%, i%
    Set sht = ThisWorkbook.Sheets(1) '将Sheet1工作表对象赋值给sht变量
    sht.[A1:F1] = Array("up", "视频标题", "视频简介", "up主页", "视频封面", "视频ID") '设置表头
    
    '以下是解析JSON的过程
    Set js = CreateObject("ScriptControl") '------------------------创建ScriptControl对象来使用JavaScript语言
    js.Language = "JScript" '---------------------------------------设置JavaScript语言
    js.AddCode "var data=(" & data & ");var list=data.data.medias" '添加js代码,这里是把JSON数据传递给js变量,需要的视频列表在medias属性里面
    
    l = js.eval("a=list.length") '获取list数组长度
    With sht
        For i = 0 To l - 1 '在js中,数组索引由0开始,所以-1
            .Cells(i + 2, 1) = js.eval("a=list[" & i & "].upper.name") 'up
            .Cells(i + 2, 2) = js.eval("a=list[" & i & "].title") '视频标题
            .Cells(i + 2, 3) = js.eval("a=list[" & i & "].intro") '视频简介
            .Cells(i + 2, 4) = js.eval("a=list[" & i & "].upper.mid") 'up主页
            .Cells(i + 2, 5) = js.eval("a=list[" & i & "].cover") '视频封面
            .Cells(i + 2, 6) = js.eval("a=list[" & i & "].bvid") '视频ID
        Next
        .Rows("1:" & l + 2).RowHeight = 13.5 '设置行高
    End With
    
End Sub

Function getHeader()
    getHeader = Join([{"htt","ps://ap","i.bili","bili.c","om/","x/v3/fav/resource/list?"}], "")
End Function

Function getJSON(url As String)
    With CreateObject("WinHttp.WinHttpRequest.5.1")
        .Open "GET", url, True
        .send
        .WaitForResponse
        getJSON = .ResponseText
    End With
End Function

解析后的效果:

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Excel效率人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值