我的目标是搜索一些数据并将结果返回到excel表中。我正在使用newsapi.org服务,并使用VBA来做到这一点。
我正在将XMLHttpRequest发送到newsapi.org并成功接收到(JSON)响应,我可以将其保存到桌面上的文件中。但是,由于收到运行时错误13:类型不匹配,我无法将该响应导入到excel中。
很奇怪,当我将源更改为其他JSON文件时,它可以工作。例如http://jsonplaceholder.typicode.com/users
所以我假设问题出在我收到的JSON响应类型附近。
Public Sub xmlhttptutorial()
Dim xmlhttp As Object
Dim myurl As String
Dim JSON As Object
Dim myFile As String
Dim i As Integer
Dim ws As Worksheet
Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
Set ws = Sheet2
myFile = "C:\Users\A0781525\Desktop\myFile.txt"
myurl = "https://newsapi.org/v2/everything?q=Ashley%20Madison%20Data%20Breach&"
xmlhttp.Open "GET", myurl, False
xmlhttp.Send
Set JSON = JsonConverter.ParseJson(xmlhttp.ResponseText)
Open myFile For Output As #1: Print #1, xmlhttp.ResponseText: Close #1
i = 2
For Each Item In JSON
Range("A2").Value = Item("articles")("0:")("source")("id:")
Range("A2").Value = Item("articles")("0:")("source")("name")
Range("A2").Value = Item("articles")("0:")("title")
i = i + 1
Next
End Sub
中断发生在第:
Range("A2").Value = Item("articles")("0:")("source")("id:")
我收到的JSON文件输出示例:
{“ status”:“ ok”,“ totalResults”:16,“ articles”:[{“ source”:{“ id”:“ mashable”,“ name”:“ Mashable”},“ author”: “ Jack Morse”,“ title”:“色情网站泄露了超过一百万用户的私人信息”,“ description”:“关于互联网的伟大之处在于,没有人知道您对无尽色情内容有认真的看法。除非,也就是您拥有帐户的色情网站泄露了您的个人信息。超过一百万的Luscious.net帐户持有人面临着无法解决的问题……“,” url“:” https://mashable.com/article/porn-site-leaks-users-data/“,” urlToImage“:” {{ 3}}“,” publishedAt“:” 2019-08-20T22:36:24Z“,” content“:”关于互联网的伟大之处在于,没有人知道您对无尽色情内容有严肃的看法。除非,也就是说,您拥有一个色情网站的色情网站泄露了您的个人信息。\ r \ n超过100万个Luscious.net帐户持有人面临着这种不正常……[+2840个字符]“}
答案 0 :(得分:1)
您错误地解析了JSON。可能是由于对它的构造有误解。
尝试类似的东西:
i = 2
'Cells.Clear
For Each item In JSON("articles")
Cells(i, 1).Value = item("source")("id")
Cells(i, 2).Value = item("source")("name")
Cells(i, 3).Value = item("title")
i = i + 1
Next
答案 1 :(得分:1)
问题出在您尝试访问已解析的json元素的方式上。
没有最好的JSON确切结构,我假设您需要做的是这样:
Debug.Print JSON("articles")(1)("source")("id")
访问第一篇文章的ID。
或这个
For Each item In JSON("articles")
Debug.Print item("source")("id")
Next item
在它们之间循环