如何从编码HTML中停止CreateObject(" msxml2.xmlhttp")?

时间:2016-02-06 00:22:02

标签: json vba access-vba

我在MS ACCESS中有一个VBA脚本,它正在获取网页的JSON输出。检索后,我使用VBA-JSON处理数据并将其插入Access数据库。它工作得很漂亮。

这是我检索JSON内容的代码:

With CreateObject("WinHttp.WinHttpRequest.5.1")
    .Open "GET", URL, False
    .setRequestHeader "Content-Type", "text/html"
    .send
    htm.body.innerHTML = .responseText
    ' Debug.Print .ResponseStream
End With

我遇到了一点障碍,我无法找到解决办法:

在JSON的值中,双引号已编码为",以便不破坏JSON。问题是,当我检索页面的JSON内容时,它被编码为",这使得JSON无效。

如何判断它在检索时不对这些HTML值进行编码,或者只是为了逃避这些值,这样就不会破坏我的代码?我猜测可能有另一个我可以使用的课程没有这个问题,但经过几个小时的搜索,我很难过。

1 个答案:

答案 0 :(得分:0)

JSON是一种完全独立于语言但使用约定的文本格式。值可以是双引号中的字符串,也可以是数字,或者是true或false或null。可以在http://www.json.org/找到JSON的定义。

JSON喜欢双引号(作为字符串分隔符)。

&quot是HTML'编码'因为HTML不喜欢双引号,而不是JSON。如果双引号包含在JSON字段中,则它采用HTML表单"以避免混淆。

因此,在代码中将变量定义为字符串Dim a$并设置a$ = .responseText,并将所有&quot替换为单引号,即CHR$(39)

a$ = Replace (a$, """, CHR$(39))

之后

htm.body.innerHTML = a$

你将拥有一个JSON友好的文本文件。

有趣的说明: 在我的回答中,我必须编写"作为代码,编辑器会自动将此字符串更改为双引号(以HTML格式呈现!)